Manuel PHP

Table des matières

Préface
I. Au moment de commencer
II. Installation et configuration
III. Référence du langage
IV. Sécurité
V. Caractéristiques
VI. Référence des fonctions
VII. PHP et le moteur interne Zend
VIII. FAQ : foire Aux Questions
IX. Annexes
Remerciements



Que font les références ?

Les références vous permettent de faire pointer deux variables sur le même contenu. Par exemple, lorsque vous faites :

Exemple 21-1. Les références

<?php
$a =& $b;
?>

cela signifie que “$a” et “$b” pointent sur le même contenu.

Note : “$a” et “$b” sont complètement égales ici : ce n’est pas “$a” qui pointe sur “$b”, ou vice versa. C’est bien “$a” et “$b” qui pointent sur le même contenu.
Note : Si un tableau par référence est copié, ses valeurs ne sont pas déréférencées. Cela est valide également pour les tableaux passés par valeur aux fonctions.

La même syntaxe peut être utilisée avec les fonctions qui retournent des références, et avec l’opérateur “new” (PHP 4.0.4 et plus récent):

Exemple 21-2. Les références et “new()”

<?php
$bar =& new fooclass();
$foo =& find_var($bar);
?>

Note : À moins d’utiliser la syntaxe ci-dessus, le résultat de “$bar = new fooclass()” ne sera pas la même variable que “$this” dans le constructeur, ce qui signifie que si vous avez utilisé la référence “$this” dans le constructeur, vous devez assigner la référence, ou bien obtenir deux objets différents.
Même si vous pouvez utiliser l’opérateur “@” pour supprimer les messages d’erreurs du constructeur avec la syntaxe “@new”, cela ne fonctionnera pas avec la syntaxe “&new”. C’est une limitation du moteur Zend, et cela conduit à une erreur d’analyse.
Avertissement
Si vous assignez une référence à une variable définie en tant que “global” dans une fonction, la référence sera visible uniquement à l’intérieure de la fonction. Vous pouvez éviter cela en utilisant le tableau “$GLOBALS”. Exemple 21-3. Référencer une variable globale à l’intérieure d’une fonction

<?php
$var1 = "Variable Exemple";
$var2 = "";
 
function global_references($use_globals)
{
    global $var1, $var2;
    if (!$use_globals) {
        $var2 =& $var1; // visible uniquement dans la fonction
    } else {
        $GLOBALS["var2"] =& $var1; // visible également dans un contexte global
    }
}
 
global_references(false);
echo "var2 est défini à '$var2'\n"; // var2 est défini à ''
global_references(true);
echo "var2 est défini à '$var2'\n"; // var2 est défini à 'Variable Exemple'
?>
Voyez “global $var;” comme un raccourci pour “$var =& $GLOBALS[’var’];”. De ce fait assignant d’autres références à “$var” changeant uniquement la référence locale de la variable. |

Note : Si vous assignez des valeurs par références dans une structure foreach, les références seront également modifiées.
| Exemple 21-4. Références et structure foreach |

<?php
$ref = 0;
$row =& $ref;
foreach (array(1, 2, 3) as $row) {
    // faites quelque chose
}
echo $ref; // 3 - le dernier élément du tableau itéré
?>

Avertissement
Les tableaux complexes sont parfois plutôt copiés que référencés. De ce fait, l’exemple suivant ne fonctionnera pas comme prévu : Exemple 21-5. Références avec un tableau complexe

<?php
$top = array(
    'A' => array(),
    'B' => array(
        'B_b' => array(),
    ),
);
 
$top['A']['parent'] = &$top;
$top['B']['parent'] = &$top;
$top['B']['B_b']['data'] = 'test';
print_r($top['A']['parent']['B']['B_b']); // array()
?>
|

Le deuxième intérêt des références est de pouvoir passer des variables par référence. On réalise ceci en faisant pointer des variables locales vers le contenu des variables de fonction. Exemple :

Exemple 21-6. Passage de paramètre par référence

<?php
function foo(&$var) {
  $var++;
}
$a=5;
foo($a);
?>

“$a” vaut 6. Cela provient du fait que dans la fonction “foo”, la variable “$var” pointe sur le même contenu que “$a”. Voir aussi les explications détaillées dans passage par référence.

Le troisième intérêt des références est de retourner des valeurs par référence.

Travail collaboratif

Contribuez, en ajjoutant des elements a cette page de manuel :

Merci de votre aide
L’equipe Php.fr

 


Index | Afficher le texte source | Anciennes révisions | Derniers changements | Connexion
©2007 Wiki Copyright