代码之家  ›  专栏  ›  技术社区  ›  fabrik

什么时候用PHP返回值?

  •  1
  • fabrik  · 技术社区  · 14 年前

    考虑到这种丑陋的方法:

    public function convert_cell_value( $val, $type )
    {
        if($type == 'String')
        {
            return $val;
        }
        elseif($type == 'Number')
        {
            if($val - intval($val) > 0)
            {
                return $val;
            }
            else
            {
                return intval($val);
            }
        }
        else
        {
            return $val;
        }
    }
    

    现在我的100亿美元的问题是:什么时候我应该返回值(不是这个方法,而是其他类似的方法)来应用DRY原则并追求性能。或者:我对性能的想法有问题,当我立即返回一些值时,这与性能无关?

    附加问题:有没有比这更简单的技巧来获得小数?

    if($val - intval($val) > 0)
    {
        return $val;
    }
    

    谢谢你宝贵的时间, 法布里克

    6 回复  |  直到 14 年前
        1
  •  6
  •   Gumbo    14 年前

    您可以将方法逻辑简化为:

    public function convert_cell_value( $val, $type )
    {
        if ($type === 'Number' && ($ret = intval($val)) == $val) {
            return $ret;
        }
        return $val;
    }
    

    switch :

    public function convert_cell_value( $val, $type )
    {
        switch ($type) {
        case 'Number':
            if (($ret = intval($val)) == $val) {
                return $ret;
            }
        case 'String':
        default:
            return $val;
        }
    }
    

    你也可以只用一个 return 更换 return $ret $val = $ret 返回正确的值。

        2
  •  2
  •   Victor Nicollet    14 年前

    这里的函数可以重构为:

    function convert_cell_value($val, $type)
    {
      if ($type == 'Number') 
        return intval($val);
      else
        return $val;
    }
    

    在实践中,返回值很少受到DRY的影响,因为“return”是一种次要的冗余,通常只能通过多次赋给变量并返回该变量一次来替换。

    单进单出

    在像您这样的情况下,函数结构实际上是“决定返回什么”,因此readability参数不适用。

        3
  •  1
  •   PJP    14 年前

    由于您的代码将只通过一个选项,因此我将返回值存储在一个变量中,并在方法末尾返回它。

        4
  •  1
  •   gianebao Charitha    14 年前

    使用三元和隐式转换。

    public function convert_cell_value($val, $type) {
        return $type === 'Number' && !is_float($val + 1) ? intval($val): $val;
    }
    

    严格整数值 . 因此,如果你有下面的值并进行比较,结果将是 false 即使它应该是 true

    intval('420000000000000000000'); // 2147483647
    
        5
  •  0
  •   Elzo Valugi    14 年前

    作为一个规则,我更喜欢每个函数只有一个返回值,以保证可读性。有一个返回的变量比直接返回快99.99%,而且调试起来简单得多。

    // code from Gumbo
    public function convert_cell_value( $val, $type )
    {
        if ($type === 'Number' && ($ret = intval($val)) == $val) {
            $val = $ret; // this is the extra assigment
        }
        return $val; // only 1 return
    }
    
        6
  •  0
  •   enricog    14 年前

    这取决于功能。 如果您有一个函数执行一些不同的(而且性能代价很高)检查,并且如果一个检查失败,返回值应该为false,那么立即返回它是有意义的。