3 Question: Qu'est-ce que cela signifie de démarrer une fonction PHP avec une esperluette?

question créée à Fri, Sep 12, 2014 12:00 AM

J'utilise la bibliothèque Facebook avec ce code:

 
class FacebookRestClient {
...
    public function &users_hasAppPermission($ext_perm, $uid=null) {
        return $this->call_method('facebook.users.hasAppPermission', 
        array('ext_perm' => $ext_perm, 'uid' => $uid));
    }
...
}

Qu'est-ce que le & au début de la définition de la fonction signifie, et comment puis-je utiliser une bibliothèque comme celle-ci (dans un exemple simple)

    
118
3 réponses                              3                         

Une esperluette avant un nom de fonction signifie que la fonction retournera une référence à une variable au lieu de la valeur.

  

Le renvoi par référence est utile lorsque   vous voulez utiliser une fonction pour trouver   quelle variable une référence devrait être   lié. Ne pas utiliser return-by-reference   pour augmenter les performances. Le moteur   optimisera automatiquement ceci sur   sa propre. Ne renvoyez que des références lorsque   vous avez une raison technique valable pour   faites-le.

Voir Renvoyer des références .

    
146
2011-11-13 02: 11: 44Z
  1. De plus, php.net/references pourrait aider un peu aussi.
    2009-11-04 21: 54: 01Z
  2. Donc, sans entrer dans les détails, vous appelez (avec la classe instanciée) quelque chose comme $results = $facebook- > users_hasAppPermission ($param1, $param2) ; ? Je suppose que je ne suis pas sûr de la nuance ici, merci pour l'aide cependant.
    2009-11-04 21: 56: 40Z
  3. Ouais, je l'appellerais comme ça.
    2009-11-04 22: 19: 24Z

Cela renvoie une référence, comme mentionné précédemment. En PHP 4, les objets étaient assignés par valeur, comme toute autre valeur. Ceci est très peu intuitif et va à l’encontre du fonctionnement de la plupart des autres langues.

Pour contourner le problème, des références ont été utilisées pour les variables pointant vers des objets. En PHP 5, les références sont très rarement utilisées. J'imagine que c'est du code hérité ou du code essayant de préserver la compatibilité descendante avec PHP 4.

    
14
2015-12-01 18: 27: 20Z
  1. C'est la bibliothèque PHP officielle de Facebook, FWIW.
    2009-11-04 22: 01: 45Z
  2. @ Alex: Dans ce cas, ils le font probablement pour protéger les pirates occasionnels, qui utilisent php4, d'eux-mêmes. Vous ne devriez pas faire cela dans votre propre code - il est déconseillé.
    2009-11-04 22: 36: 35Z
  3. "C'est très peu intuitif et contraire à la façon dont la plupart des autres langues fonctionnent" Je ne pouvais plus être en désaccord.
    2011-08-01 14: 52: 13Z
  4. @ WildlyInaccurate: assigner des objets par référence par défaut, ce qui se passe dans .NET et Java (je pense), est extrêmement peu intuitif. Dans la plupart des autres langues, la cession se fait par copie, que vous ayez un "objet", une primitive ou autre chose, et comme cela a été le cas depuis la nuit des temps, le monde aurait dû s'en tenir à cela.
    2012-12-04 17: 29: 17Z
  5. Que quelque chose soit intuitif est probablement plutôt subjectif. Mais pour les langages qui sont par ailleurs similaires à PHP, la norme est de transmettre les objets par référence. En ce qui concerne la POO, je dirais que c’est la façon la plus intuitive, car la POO concerne l’encapsulation de l’état, de sorte que les programmesr à cet état, plutôt que de le cloner.
    2012-12-05 00: 04: 04Z

En PHP, cela est souvent appelé référence de renvoi ou renvoi par référence .

  

Le renvoi par référence est utile lorsque vous souhaitez utiliser une fonction pour   trouver à quelle variable une référence doit être liée. Ne pas utiliser   retour par référence pour augmenter les performances. Le moteur va   optimiser automatiquement cela seul. Ne renvoyez que des références lorsque   vous avez une raison technique valable pour le faire.

Documentation PHP sur Renvoi de référence >

Une référence en PHP est simplement un autre nom attribué au contenu d'une variable. Les références PHP ne sont pas des pointeurs de la programmation C , elles ne sont pas réelles. adresses de mémoire, ils ne peuvent donc pas être utilisés pour l’arithmétique de pointeur.

Le concept de renvoi de références peut être très déroutant, particulièrement pour les débutants. Un exemple vous sera donc utile.

 
$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 

La fonction getPopulationCount() définie avec un & précédent renvoie la référence au contenu ou à la valeur de $populationCount. Ainsi, en incrémentant $countryPopulation, on incrémente également $populationCount.

    
3
2019-01-21 08: 58: 27Z
source placée ici