关于引用参数或显式返回值的PHP方法的最佳实践

时间:2014-03-28 13:25:10

标签: php return pass-by-reference return-type pass-by-value

我已经使用了两种方法但我最近想知道为什么我没有对其中一种进行标准化,或者是否有最佳实践以及背后的原因是什么。

虽然PHP的returning references页面非常明确地说明了返回引用:

  

只有在有正当技术理由的情况下才能返回引用。

...在谈论参数和返回方法时,passing by reference页面并不清晰。

考虑以下两个例子:

引用返回

class foo {
    public static function bar(&$val) {
        $val++;
    }
}

$input = 0;
foo::bar($input);
echo $input;  // outputs 1

明确返回

class foo {
    public static function bar($val) {
        $val++;
        return $val;
    }
}

$input = 0;
$input = foo::bar($input);
echo $input;  // outputs 1

两种方法执行相同的任务并返回相同的值,但它们只是以稍微不同的方式完成它。我知道这种情况(同一任务的多个解决方案)在PHP中很常见,但我的问题是......

以上两种方法中的一种优先于其他方法,如果是这样,为什么?


我应该指出,我确实看到了其他类似的问题:What's the difference between passing by reference vs. passing by value?但它们处理的是效果和示例,而不是为什么一个优先于另一个。


修改 通过关于问题优点的长时间讨论来节省任何其他人的阅读麻烦......

在考虑底层代码中固有的开销或优化(无论是PHP还是C)以及在转换为OpCode并将其置于可能数千的上下文后如何转化为性能时,我希望有一些具体的东西。的应用服务器。小优化可能会对月末的底线产生重大影响。

我没想到会有这种不情愿,但我的猜测是,当您考虑基本的编程要求时,乍一看没有区别。我们是一个不同的情况,所以我应该在前面更加具体。

如果有其他人在意,我会全力以赴。

1 个答案:

答案 0 :(得分:0)

正如已经说过的,它取决于你。 在我看来,显式返回总是最好的方式,所以如果你在6个月内回到你的代码,你就不会问自己$input var是如何递增的!

当代码生成10行时,确实很容易找到代码的作用,但是当您处理更复杂的应用程序时却不行。

实际上,您需要在显式返回中编写更多代码,但它更具可读性和开发人员,您将很容易理解您所做的事情,这对于应用程序的可维护性非常重要。 / p>