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