Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Veja o seguinte:
eval("echo 1+2+3+4+5+6+7+8+9;"); //deveria mostrar 45
O comando de cima mostra 45 certinho...mas:
eval("echo 1+2+3+4+5+6+7+8+09;"); // mostra 36 quando deveria mostrar 45
ou seja, ignorou o 09.
eval("echo 1+2+3+4+5+6+7+08+09;"); //ignorou o 08 e o 09, = 28
eval("echo 1+2+3+4+5+6+07+08+09;"); // ignorou o 08 e o 09 mas não o 07, = 28
eval("echo 1+2+3+4+5+6+7+08+09+010;"); // apareceu 36, d'onde saiu esse 36 ?
Então:
eval("echo 08+09;");//0
eval("echo 08+09+010;");//8 seria coisa do diabólico?
Bem, eval é coisa do demônio per se. Não use-o.
Sempre que um número começa com 0 no PHP (e na maioria das linguagens), ele é, automaticamente, um octal, e não um inteiro.
Octals inválidos são ignorados, por isso 08 e 09 são ignorados e 010 é 8 em base 8, logo 08+09+010 é 8.
E para comprovar, basta você somar 08 com 09, vai dar zero.
Quando um numero começa com zero, 08, 09 010 ele é interpretado como um octal(base 8)
http://php.net/manual/en/language.types.integer.php