用 & 符号启动 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 函数是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

这个符号在 PHP 中是啥意思 <?=

在这种情况下,&(和号)符号是啥意思?

php函数参数中的&符号是啥意思

java中这个符号“=”是啥意思?

[重复]的php @符号是啥

JAVA中&&和是啥意思 怎么用