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

Ale*_*Mcp 126 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));
    }
...
}
Run Code Online (Sandbox Code Playgroud)

函数定义的开头是什么意思,以及我如何使用这样的库(在一个简单的例子中)

Dom*_*ger 154

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

当您想要使用函数来查找引用应该绑定到哪个变量时,通过引用返回很有用.不要使用按引用返回来提高性能.引擎将自动对其进行自动优化.只有在有正当技术理由的情况下才返回引用.

请参阅返回参考.

  • 是的 - 我只是这样称呼它. (2认同)

tro*_*skn 15

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

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

  • @WildlyInaccurate:默认情况下通过引用分配对象,这在.NET和Java(我认为)中发生的情况非常不直观.在大多数其他语言中,分配是通过复制完成的,无论你是否有"对象"或原语或其他什么,而且自从时间开始就是这种情况,这就是世界应该坚持的. (4认同)
  • @Alex:在这种情况下,他们可能会这样做是为了保护那些使用php4的休闲黑客.你不应该在自己的代码中执行此操作 - 它已被弃用. (3认同)
  • 一些东西是否直观可能是相当主观的.但对于与PHP类似的语言,规范是通过引用传递对象.关于OOP,我认为这是最直观的方式,因为OOP是关于封装状态,所以程序通常会引用该状态,而不是克隆它. (3认同)
  • "这是非常不直观的,与大多数其他语言的工作方式相反",我不能不同意. (2认同)

Eli*_*noo 5

这在 PHP 中通常称为Returning referenceReturning by reference

当您想使用函数查找引用应该绑定到哪个变量时,按引用返回很有用。不要使用按引用返回来提高性能。引擎将自动对此进行优化。仅当您有有效的技术原因时才返回引用。

有关返回参考的PHP 文档

PHP 中的引用只是分配给变量内容的另一个名称。PHP 引用不像 C 编程中的指针,它们不是实际的内存地址,因此它们不能用于指针运算。

返回引用的概念可能非常令人困惑,尤其是对于初学者而言,因此示例会有所帮助。

$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 
Run Code Online (Sandbox Code Playgroud)

getPopulationCount()用前面定义的函数&,返回对内容或值的引用$populationCount。所以,递增$countryPopulation,也递增$populationCount