使用&符号启动PHP函数意味着什么?

时间:2009-11-04 21:50:18

标签: php oop

我正在使用带有此代码的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));
    }
...
}

&在函数定义的开头意味着,我如何使用这样的库(在一个简单的例子中)

3 个答案:

答案 0 :(得分:145)

函数名前的&符号表示函数将返回对变量的引用而不是值。

  

通过引用返回时很有用   你想用一个函数来找到   引用应该是哪个变量   界。不要使用按引用返回   提高性能。引擎   将自动优化此功能   它自己的。仅在返回时引用   你有一个有效的技术理由   这样做。

请参阅Returning References

答案 1 :(得分:14)

如前所述,它正在返回一个引用。在PHP 4中,对象按值分配,就像任何其他值一样。这非常不直观,与大多数其他语言的工作方式相反。

为了解决这个问题,引用被用于指向对象的变量。在PHP 5中,很少使用引用。我猜这是遗留代码或代码试图保持与PHP 4的向后兼容性。

答案 2 :(得分:3)

这在PHP中通常称为返回参考通过参考返回

  

当您想使用函数来通过引用返回时很有用   查找引用应该绑定到哪个变量。不使用   参考返回以提高性能。引擎会   自行自动优化。仅在以下情况下返回引用   您有充分的技术理由这样做。

PHP documentation on Returning reference

PHP中的引用只是分配给变量内容的另一个名称。 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