diff --git a/language/variables.xml b/language/variables.xml index f52a469676..95bd5eec1a 100644 --- a/language/variables.xml +++ b/language/variables.xml @@ -1,8 +1,9 @@ - + - + Les variables @@ -46,7 +47,7 @@ Noms de variables valides - + ]]> @@ -86,7 +86,6 @@ $4site = 'pas encore'; // invalide : commence par un nombre ${'nom-invalide'} = 'bar'; $nom = 'nom-invalide'; echo ${'nom-invalide'}, " ", $$nom; -?> ]]> &example.outputs; @@ -128,9 +127,8 @@ bar bar $foo = 'Pierre'; // Assigne la valeur 'Pierre' à $foo $bar = &$foo; // Référence $foo avec $bar. $bar = "Mon nom est $bar"; // Modifie $bar... -echo $bar; -echo $foo; // $foo est aussi modifiée -?> +echo $bar . PHP_EOL; +echo $foo . PHP_EOL; // $foo est aussi modifiée ]]> @@ -143,17 +141,37 @@ echo $foo; // $foo est aussi modifiée + + + + + +// Note : un avis est émis, mais la valeur sans référence est assignée +$result1 = &test(); // invalide car test() ne retourne pas une variable par référence. +var_dump($result1); + +// Cette fonction est définie comme retournant une référence, mais ne retourne pas une variable +function &test2() +{ + return 26; // invalide car la valeur retournée n'est pas une référence à une variable. +} + +// Note : la valeur sans référence est assignée +$result2 = &test2(); +var_dump($result2); ]]> @@ -175,7 +193,6 @@ $bar = &test(); // invalide car test() ne retourne pas une variable par réf ]]> &example.outputs; @@ -199,7 +216,7 @@ NULL +var_dump($unset_array); ]]> @@ -265,13 +282,11 @@ $unset_array[] = 'valeur'; // Ne génère pas d'avertissement. Exemple de portée de variable globale - + ]]> @@ -294,12 +309,11 @@ include 'b.inc'; // La variable $a sera disponible dans b.inc. $a = 1; // portée globale function test() -{ - echo $a; // La variable $a est indéfinie car elle fait référence à une version locale de $a +{ + var_dump($a); // La variable $a est indéfinie car elle fait référence à une version locale de $a } test(); -?> ]]> @@ -350,7 +364,6 @@ function somme() somme(); echo $b; -?> ]]> &example.outputs; @@ -394,9 +407,7 @@ function somme() somme(); echo $b; -?> ]]> - @@ -413,14 +424,13 @@ echo $b; Exemple montrant les superglobales et la portée - + ]]> @@ -451,10 +461,13 @@ function test_superglobal() function test() { $a = 0; - echo $a; + echo $a . PHP_EOL; $a++; } -?> + +test(); +test(); +test(); ]]> @@ -478,10 +491,13 @@ function test() function test() { static $a = 0; - echo $a; + echo $a . PHP_EOL; $a++; } -?> + +test(); +test(); +test(); ]]> @@ -510,13 +526,14 @@ function test() static $count = 0; $count++; - echo $count; + echo $count . PHP_EOL; if ($count < 10) { test(); } $count--; } -?> + +test(); ]]> @@ -530,7 +547,7 @@ function test() Déclaration de variables statiques - + ]]> @@ -570,7 +586,6 @@ function exampleFunction($input) { // ne conserve pas sa valeur. echo exampleFunction('A'); // Affiche : Input: A, Counter: 1 echo exampleFunction('B'); // Affiche : Input: B, Counter: 1 -?> ]]> @@ -604,7 +619,6 @@ var_dump(Foo::counter()); // int(1) var_dump(Foo::counter()); // int(2) var_dump(Bar::counter()); // int(3), avant PHP 8.1.0 int(1) var_dump(Bar::counter()); // int(4), avant PHP 8.1.0 int(2) -?> ]]> @@ -645,21 +659,20 @@ test_global_ref(); var_dump($obj); test_global_noref(); var_dump($obj); -?> ]]> - - &example.outputs; + &example.outputs; - + - - + + + Un comportement similaire s'applique à la commande static. Les références ne sont pas stockées dynamiquement : @@ -710,12 +723,10 @@ $still_obj1 = get_instance_ref(); echo "\n"; $obj2 = get_instance_noref(); $still_obj2 = get_instance_noref(); -?> ]]> - - &example.outputs; - + &example.outputs; + - - + + + Ces exemples illustrent les problèmes rencontrés lors de l'assignation de référence à des variables statiques, qui sont @@ -752,7 +764,7 @@ Static object: object(stdClass)#3 (1) { +var_dump($a); ]]> @@ -769,8 +781,9 @@ $a = 'bonjour'; +var_dump($bonjour); ]]> @@ -785,8 +798,9 @@ $$a = 'monde'; +$a = 'bonjour'; +$$a = 'monde'; +echo "$a {$$a}"; ]]> @@ -799,8 +813,9 @@ $$a = 'monde'; ]]> @@ -866,7 +881,6 @@ echo $foo->{$start . $end} . "\n"; $arr = 'arr'; echo $foo->{$arr[1]} . "\n"; echo $foo->{$arr}[1] . "\n"; -?> ]]> &example.outputs; @@ -930,12 +944,11 @@ I am B. Accéder simplement à des variables de formulaires POST - + ]]> @@ -973,7 +986,7 @@ echo $_REQUEST['username']; Variables de formulaires complexes - + - + ]]> @@ -1100,7 +1112,7 @@ setcookie("MyCookie[bar]", 'Test 2', time()+3600); Exemple avec <function>setcookie</function> - + ]]> @@ -1125,11 +1136,10 @@ setcookie("Panier[$compte]", $item, time()+3600); sont passées à un script. Cependant, il faut noter que les points (.) ne sont pas autorisés dans les noms de variables PHP. Pour cette raison, il convient d'examiner : - + +$varname.ext; /* nom de variable invalide */ ]]> Dans ce cas, l'analyseur croit voir la variable nommée