Qu'est-ce que =& signifie en PHP?

prendre en considération:

$smarty =& SESmarty::getInstance();

à quoi sert le & ?

17
php
demandé sur Peter Mortensen 2010-01-17 20:06:12

3 réponses

Il passe par référence. Ce qui signifie qu'il ne créera pas une copie de la valeur transmise.

voir: http://php.net/manual/en/language.references.php (voir la réponse D'Adam)

habituellement, si vous passez quelque chose comme ceci:

$a = 5;
$b = $a;
$b = 3;

echo $a; // 5
echo $b; // 3

la variable originale ( $a ) ne sera pas modifiée si vous changez la seconde variable ( $b ). Si vous passez par référence:

$a = 5;
$b =& $a;
$b = 3;

echo $a; // 3
echo $b; // 3

l'original est également modifié.

qui est inutile lors de la circulation d'objets, car ils seront passés par référence par défaut.

27
répondu Tyler Carter 2010-01-17 17:07:19

en PHP 4, il a en quelque sorte (maladroitement) associé deux variables.

$j = 'original';
$i =& $j;
$i = 'modified';
echo $j; // The output is 'modified'

de même...

$j = 'original';
$i =& $j;
$j = 'modified';
echo $i; // The output is 'modified'

une partie de cela a été rendue un peu moins désagréable quand il s'agit d'objets dans PHP 5 , mais je pense que le cœur de celui-ci est le même, donc ces exemples devraient toujours être valables.

6
répondu Richard JP Le Guen 2015-12-06 10:32:06

les références sont utilisées pour des variables d'alias et étaient nécessaires pour utiliser efficacement l'ancien système objet.

en PHP 4, les objets se comportent comme n'importe quel autre type de valeur, c'est-à-dire que la cession créerait une copie de l'objet. Si vous vouliez éviter cela, vous deviez utiliser une référence comme dans votre exemple de code.

avec PHP 5 , les variables objet ne contiennent plus l'objet lui-même, mais une poignée (AKA identificateur d'objet) et l'attribution de copier uniquement la poignée. À l'aide d'une référence n'est plus nécessaire.

1
répondu Christoph 2015-12-06 10:34:09