用 & 符号启动 PHP 函数是啥意思?
Posted
技术标签:
【中文标题】用 & 符号启动 PHP 函数是啥意思?【英文标题】:What does it mean to start a PHP function with an ampersand?用 & 符号启动 PHP 函数是什么意思? 【发布时间】:2009-11-04 21:50:18 【问题描述】:我正在使用包含以下代码的 Facebook 库:
class FacebookRestClient
...
public function &users_hasAppPermission($ext_perm, $uid=null)
return $this->call_method('facebook.users.hasAppPermission',
array('ext_perm' => $ext_perm, 'uid' => $uid));
...
函数定义开头的 & 是什么意思,我该如何使用这样的库(在一个简单的例子中)
【问题讨论】:
【参考方案1】:函数名前的和号表示函数将返回对变量的引用而不是值。
通过引用返回在以下情况下很有用 你想使用一个函数来查找 引用应该是哪个变量 边界。不要使用按引用返回 以提高性能。引擎 将自动优化它 它自己的。仅在以下情况下返回引用 您有正当的技术理由 这样做。
见Returning References。
【讨论】:
所以,不用太详细,你会调用(类实例化)类似 $results = $facebook->users_hasAppPermission($param1, $param2); ?我想我不确定这里的细微差别,不过感谢您的帮助。 是的 - 我就这么称呼它。【参考方案2】:如前所述,它正在返回一个引用。在 php 4 中,对象是按值分配的,就像任何其他值一样。这是非常不直观的,并且与大多数其他语言的工作方式相反。
为了解决这个问题,引用用于指向对象的变量。在 PHP 5 中,很少使用引用。我猜这是遗留代码或试图保持与 PHP 4 向后兼容性的代码。
【讨论】:
这是官方的 Facebook PHP 库,FWIW。 @Alex:在这种情况下,他们这样做可能是为了保护使用 php4 的临时黑客免受他们自己的伤害。您不应该在自己的代码中执行此操作 - 它已被弃用。 “这非常不直观,并且与大多数其他语言的工作方式相反”我完全不同意。 @WildlyInaccurate:默认情况下通过引用分配对象,这是在 .NET 和 Java 中发生的(我认为),非常不直观。在大多数其他语言中,赋值是通过复制完成的,无论你有一个“对象”还是一个基元或其他什么,既然从一开始就是这种情况,这就是世界应该坚持的。跨度> 某事物是否直观可能是相当主观的。但是对于在其他方面类似于 PHP 的语言,规范是通过引用传递对象。关于 OOP,我想说这是最直观的方式,因为 OOP 是关于封装状态的,所以程序通常会引用该状态,而不是克隆它。【参考方案3】:这在 PHP 中通常称为返回引用或通过引用返回。
当你想使用一个函数来返回引用时很有用 查找应该将引用绑定到哪个变量。不使用 通过引用返回以提高性能。发动机将 自动对其进行优化。仅在以下情况下返回引用 您有正当的技术理由这样做。
PHP documentation on Returning reference
PHP 中的reference 只是分配给变量内容的另一个名称。 PHP references are not like pointers in C programming,它们不是实际的内存地址,因此它们不能用于指针算术。
返回引用的概念可能会非常令人困惑,尤其是对初学者而言,因此举个例子会很有帮助。
$populationCount = 120;
function &getPopulationCount()
global $populationCount;
return $populationCount;
$countryPopulation =& getPopulationCount();
$countryPopulation++;
echo "\$populationCount = $populationCount\n"; // Output: $populationCount = 121
echo "\$countryPopulation = $countryPopulation\n"; //Output: $countryPopulation = 121
用前面的&
定义的函数getPopulationCount()
,返回对$populationCount
的内容或值的引用。所以,增加$countryPopulation
,也会增加$populationCount
。
【讨论】:
为什么我们在分配返回值时使用&
? $countryPopulation =& getPopulationCount();
& 符号用于通过引用(内存中的地址)分配,而不是按值分配。
用&
符号启动功能还不够吗?以上是关于用 & 符号启动 PHP 函数是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章