关于oop:用&符号启动PHP函数意味着什么?

What does it mean to start a PHP function with an ampersand?

我正在使用包含以下代码的Facebook库:

1
2
3
4
5
6
7
8
class FacebookRestClient {
...
    public function &users_hasAppPermission($ext_perm, $uid=null) {
        return $this->call_method('facebook.users.hasAppPermission',
        array('ext_perm' => $ext_perm, 'uid' => $uid));
    }
...
}

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


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

Returning by reference is useful when
you want to use a function to find to
which variable a reference should be
bound. Do not use return-by-reference
to increase performance. The engine
will automatically optimize this on
its own. Only return references when
you have a valid technical reason to
do so.

请参见返回引用。


如前所述,它返回一个引用。在php 4中,对象是按值分配的,就像其他值一样。这是非常不具说服力的,与大多数其他语言的工作方式相反。

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


在PHP中,这通常被称为返回引用或通过引用返回。

Returning by reference is useful when you want to use a function to
find to which variable a reference should be bound. Do not use
return-by-reference to increase performance. The engine will
automatically optimize this on its own. Only return references when
you have a valid technical reason to do so.

返回引用的PHP文档

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

返回引用的概念可能非常混乱,特别是对于初学者来说,因此示例将很有帮助。

1
2
3
4
5
6
7
8
9
10
11
12
13
$populationCount = 120;

function &getPopulationCount() {
  global $populationCount;
  return $populationCount;
}

$countryPopulation =& getPopulationCount();
$countryPopulation++;
echo"\$populationCount = $populationCount
"
; // Output: $populationCount = 121
echo"\$countryPopulation = $countryPopulation
"
; //Output: $countryPopulation = 121

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