Question

Je suis en train d'étudier pour la certification Zend PHP5, tout semble bon, mais je ne peux pas trouver de véritables exemples du monde pour passer des variables ou retourner ma référence.

Il serait très bien, si quelqu'un a un exemple quand l'utiliser?

Était-ce utile?

La solution

Disons que vous voulez écrire une fonction qui supprime certaines valeurs d'un tableau.

function remove_elements($array, $item1, $item2, ...) {
  ...
}

Vous pouvez copier le tableau et le retourner. Mais si vous voulez savoir si quelque chose a été enlevé? Au lieu de cela vous modifiez le tableau en place et retourner le nombre d'éléments supprimés. Donc:

function remove_elements(&$array) {
  // remove elements
  return $number_removed;
}

Si vous créez une structure complexe dans votre fonction que vous pouvez vouloir renvoyer une référence plutôt qu'une copie de celui-ci. Mais ceci est un cas assez marginal parce que PHP utilise la copie en écriture (sa non copiée jusqu'à ce qu'il soit modifié), mais il y a des cas d'utilisation valides.

De retour en référence a plus de sens quand vous écrivez une fonction membre d'une classe. Vous pouvez renvoyer une référence à un membre de données, mais cela peut aussi casser l'encapsulation.

Enfin, il est intéressant de noter que tous les objets sont passés et renvoyés par référence par défaut. Tout le reste est passé et retourné par valeur.

Autres conseils

passer par référence: fonctions comme asort ()

$array = array(3, 2, 1);
asort($array);

Les objets php5 sont passés par référence par défaut. (Pour voir la description correcte http://docs.php.net/language.oop5.references )

Le passage des arguments par référence a déjà répondu ...

En tant que (monde réel) par exemple pour une valeur de retour par référence choisir les couramment où une méthode renvoie une référence au même objet que son propre appel contexte (ce $). Cela ne fonctionnerait pas (comme prévu) si la valeur de retour était une copie / clone.

par exemple.

class MyClass {  
  protected $foo = 'n/a';
  protected $bar = 'n/a';

  function foo($val) {
    $this->foo = (int)$val;
    return $this;
  }

  function bar($val) {
    $this->bar = (int)$val;
    return $this;
  }

  function __toString() {
    return 'foo='.$this->foo.' bar='.$this->bar;
  }
}

$o = new MyClass;
$o->foo(1)
  ->bar(2);
echo $o;

imprime foo=1 bar=2 et je pense que le résultat est on pouvait s'y attendre, pas de surprises ici. Si la méthode est revenu cette $ en valeur, il ne fonctionnerait plus. Vous pouvez tester que en forçant php à renvoyer une copie. Au lieu des lignes de return $this utilisent

return clone $this;

et la sortie sera

foo=1 bar=n/a

(et je ne dirais pas que cette interface intuitive; -))

Il pourrait être utile, si vous travaillez avec chainig, comme:

    public function addObject(array &$someData){
$newObj = Fabric::create($someData);
$this->listOfObj[] = $newObj;
return $newObj;
}

....
$this->addObj(array('idontknow' => 'anything'))->setName('mr.knowitall')->save();

... Sry. Même chose que Volkers :( (L'interface est Fluent comme CHAÎNAGE je le sais).

image que vous avez une interface fluide avec une méthode de charge. Le remplacement de la charge de l'interface ou ajoute des données. Ici, il pourrait être utile d'agir avec un appel par la valeur de référence de succès $ pour déterminer que la charge a réussi.

Retour par référence: Prenez quelques bases de données-objets ayant une liste de lignes. Nr. des rangées des points de données de droite de tous les objets (parallesl). Si vous retournez le nr. et le transmettre à l'objet suivant, vous pouvez sauter la ligne dans un objet et sauter dans les autres aussi. ayant toujours une grappe valide d'objets.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top