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

вопрос создан в Fri, Sep 12, 2014 12:00 AM

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

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

    
118
3 ответа                              3                         

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

  

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

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

    
146
2011-11-13 02: 11: 44Z
  1. Кроме того, php.net/references может Выручайте немного также.
    2009-11-04 21: 54: 01Z
  2. Таким образом, не вдаваясь в слишком подробности, вы бы назвали (с созданным экземпляром класса) что-то вроде $results = $facebook- > users_hasAppPermission ($param1, $param2) ; ? Я думаю, что я не уверен в нюансах здесь, спасибо за помощь, хотя.
    2009-11-04 21: 56: 40Z
  3. Да, я бы просто назвал это так.
    2009-11-04 22: 19: 24Z

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

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

    
14
2015-12-01 18: 27: 20Z
  1. Это официальная PHP-библиотека Facebook, FWIW.
    2009-11-04 22: 01: 45Z
  2. @ Alex: В этом случае они, вероятно, делают это для защиты случайных хакеров, использующих php4, от самих себя. Вы не должны делать это в своем собственном коде - он устарел.
    2009-11-04 22: 36: 35Z
  3. "Это очень не интуитивно понятно и противоречит принципам работы большинства других языков" Я не могу не согласиться больше.
    2011-08-01 14: 52: 13Z
  4. @ WildlyInaccurate: назначение объектов по ссылке по умолчанию, что и происходит в .NET и в Java (я думаю), крайне не интуитивно понятно. В большинстве других языков назначение выполняется копированием, есть ли у вас «объект» или примитив или что-то еще, и, поскольку это имело место с незапамятных времен, это то, что мир должен был придерживаться.
    2012-12-04 17: 29: 17Z
  5. Возможно, что-то интуитивно понятно, скорее субъективно. Но для языков, которые в остальном похожи на PHP, нормой является передача объектов по ссылке. Что касается ООП, я бы сказал, что это наиболее интуитивно понятный способ, поскольку ООП заключается в инкапсуляции состоянияпоэтому программы обычно ссылаются на это состояние, а не клонируют его.
    2012-12-05 00: 04: 04Z

В 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(), определенная с предшествующим &, возвращает ссылку на содержимое или значение $populationCount. Таким образом, при увеличении $countryPopulation также увеличивается $populationCount.

    
3
2019-01-21 08: 58: 27Z
источник размещен Вот