Что значит запустить PHP-функцию с амперсандом?

Я использую библиотеку 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

Амперсанд перед именем функции означает, что функция вернет ссылку на переменную вместо значения.

Возвращение по ссылке полезно, когда вы хотите использовать функцию для поиска какая переменная должна быть ссылкой связаны. Не используйте обратную ссылку для повышения производительности. Двигатель автоматически оптимизирует это на свой. Верните ссылки только тогда, когда у вас есть действительная техническая причина для сделайте это.

См. Возврат ссылок.

Ответ 2

Он возвращает ссылку, как уже упоминалось. В PHP 4 объекты были назначены по значению, как и любое другое значение. Это очень неинтуитивно и противоречит тому, как работает большинство других языков.

Чтобы обойти эту проблему, ссылки использовались для переменных, указывающих на объекты. В PHP 5 ссылки очень редко используются. Я предполагаю, что это устаревший код или код, пытающийся сохранить обратную совместимость с PHP 4.

Ответ 3

В PHP это часто называют возвращением ссылки или возвратом по ссылке.

Возврат по ссылке полезен, когда вы хотите использовать функцию, чтобы найти, к какой переменной должна быть привязана ссылка. Не используйте возврат по ссылке для увеличения производительности. Двигатель автоматически оптимизирует это самостоятельно. Возвращайте ссылки только тогда, когда у вас есть веская техническая причина для этого.

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 

Функция getPopulationCount() определенная с предшествующим getPopulationCount() &, возвращает ссылку на содержимое или значение $populationCount getPopulationCount(). Таким образом, увеличивая $countryPopulation, также увеличивается $populationCount.