Что значит запустить функцию 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));
    }
...
}

Что означает & в начале определения функции, и как мне использовать библиотеку, подобную этой (в простом примере)

3 ответа

Решение

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

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

См. Возвращение ссылок.

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

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

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

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

PHP документация по возврату ссылок

Ссылка в PHP - это просто другое имя, присвоенное содержимому переменной. Ссылки PHP не похожи на указатели в программировании на C, они не являются реальными адресами памяти, поэтому их нельзя использовать для арифметики указателей.

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

$populationCount = 120;

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

$countryPopulation =& getPopulationCount();
$countryPopulation++;
echo "\$populationCount = $populationCount\n"; // echos 121 
echo "\$countryPopulation = $countryPopulation\n"; //echos 121 

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

Другие вопросы по тегам