J'ai donc voulu tester un bout de code très rapidement et j'ai eu un résultat étrange.
Quelqu'un peut-il m'expliquer pourquoi j'ai eu ça ?
PHP version 7.2.7-1+ubuntu16.04.1+deb.sury.org+1
1===1
aboutit à la valeur true
qui, lorsqu'il est converti en une chaîne de caractères, est '1'
.1===0
aboutit à la valeur false
qui, lorsqu'il est converti en une chaîne de caractères, est ''
.
Vos invocations sont équivalentes à eval('1')
y eval('')
. Le premier est incomplet Le code PHP, puisqu'il manque un ;
. Le second n'est tout simplement rien et ne fait rien. eval
se trouve à revenir false
à force de ne rien faire.
Vous devez passer un chaîne de caractères a eval
c'est là tout l'intérêt.
eval doit être appelé avec des guillemets ""/''
que vous êtes pas faire. On peut supposer que c'est juste de la chance que false
fonctionne pour une raison quelconque, même si vous utilisez mal la construction.
La façon correcte de l'écrire serait :
var_dump(eval("return 1===1;"));
Le PHP eval () est utilisée pour évaluer un chaîne de saisie comme PHP et le traiter comme tel. Eval() n'est pas une fonction, mais elle fonctionne comme telle dans le sens où elle affiche tout, sauf qu'au lieu de l'afficher sous forme de texte, elle l'affiche sous forme de code PHP à exécuter.
Essayez
var_dump(eval("1===1;"));
1 === 0 is false
1===1 is true
Vous obtiendrez donc le même résultat si vous essayez d'exécuter ce code
eval(false); //false equal to empty string so it don't throw error
eval(true); //true is not valid php code, thats why error throwed
Les opérateurs doivent être délimités par un point-virgule.
eval(1===1 . ';'); //this is valid php code
eval('1===1;'); //this is also valid php code
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.