Bonjour,
Je voulais savoir quelle est la bonne syntaxe :
ouCode:
1
2
3
4
5 if(isset($var) == 'valeur') { #code }
Car les deux semble fonctionnerCode:
1
2
3
4 if(isset($var) AND $var == 'valeur') { #code }
Merci
Version imprimable
Bonjour,
Je voulais savoir quelle est la bonne syntaxe :
ouCode:
1
2
3
4
5 if(isset($var) == 'valeur') { #code }
Car les deux semble fonctionnerCode:
1
2
3
4 if(isset($var) AND $var == 'valeur') { #code }
Merci
la fonction isset retourne un booléen donc le 1er bout de code que vous montrez va exécuter le "if" quand la variable est définie et quelque soit sa valeur :
https://www.php.net/manual/fr/function.isset.php
https://www.php.net/manual/fr/types.comparisons.php
Très bien, merci pour cette précision.
Je suis en train de passer de PHP 7 à PHP 8 (il serait temps...) et lorsque je ne mets pas isset(), j'ai un Warning: Undefined.
J'imagine donc que je dois à chaque fois soit déclarer la variable null ou alors utiliser isset() à chaque fois ?
Par exemple voici mon ancien code :
Code:
1
2
3 if($_POST['foo'] == 'bar') { //... }
Les trois différentes manières qui suivent sont elles toute bonnes ?
Code:
1
2
3
4
5
6 $var = null; $var = $_POST['foo']; if($var === 'bar'){ //... }
Code:
1
2
3
4
5
6 if(isset($_POST['foo'])) $var = $_POST['foo']; else $var = null; if($var === 'bar'){ //... }
Code:
1
2
3 if(isset($_POST['foo']) AND $_POST['foo'] === 'bar'){ //... }
"Undefined" mais encore? Lis le message jusqu'au bout, il est là pour te dire précisément ce qui coince.
Le problème ici est que tu ne sais pas s'il existe une clef 'foo' dans le tableau $_POST. Si cette clef n'existe pas, un warning sera émis pour te le signaler dés que tu utiliseras $_POST['foo'] dans ton code (à l'exception de isset($_POST['foo']) et dans le cas d'une utilisation avec l'opérateur null coalescent).Citation:
J'imagine donc que je dois à chaque fois soit déclarer la variable null ou alors utiliser isset() à chaque fois ?
Par exemple voici mon ancien code :
Code:
1
2
3 if($_POST['foo'] == 'bar') { //... }
Non, la première ligne ne sert à rien et de toute manière une variable qui n'est pas définie sera toujours évaluée à null.Citation:
Les trois différentes manières qui suivent sont elles toutes bonnes ?
Code:
1
2
3
4
5
6 $var = null; $var = $_POST['foo']; if($var === 'bar'){ //... }
De plus tu ne testes pas l'existence de la clef 'foo', donc si elle n'existe pas => Warning: Undefined array key "foo".
Ça c'est correct.Citation:
Code:
1
2
3
4
5
6 if(isset($_POST['foo'])) $var = $_POST['foo']; else $var = null; if($var === 'bar'){ //... }
et ça c'est correct aussi. C'est la même chose que précédemment sauf que tu n'utilises pas de variable intermédiaire. (Préfères utiliser && plutôt que AND, qui s'écrit d'ailleurs en minuscule, et réserve le pour les cas plus subtile de priorité des opérateurs).Citation:
Code:
1
2
3 if(isset($_POST['foo']) AND $_POST['foo'] === 'bar'){ //... }
Variantes:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 // Plus explicite que isset() (puisqu'il s'agit de tester l'existence d'une clef) if (array_key_exists('foo', $_POST) && $_POST['foo'] === 'bar') { //... } // L'opérateur ternaire condition ? valeur si vrai : valeur si faux $var = isset($_POST['foo']) ? $_POST['foo'] : null; if ($var === 'bar') { //... } // L'opérateur null coalescent (null coalescing operator). $var = $_POST['foo'] ?? null; if ($var === 'bar') { //... }
Généralement on évite de travailler sur $_POST, $_GET, etc. et on importe les valeurs soit directement dans une variable scalaire, soit dans un tableau. Ainsi on peut toujours revenir sur les $_POST, etc. originaux si besoin.
=> Récupère tes valeurs en début de script ou donne une valeur par défaut si inexistante. Pour cela il existe l'opérateur ??.
Alternative :Code:
1
2
3
4
5
6
7 $foo = $_POST['foo'] ?? null; // $foo vaudra la valeur de $_POST['foo'] ou null par défaut, cela sans warning if ($foo === null) { echo '$foo non transmis'; } else { ... }
Code:
1
2 $request['post']['foo'] = $_POST['foo'] ?? null; ...