di4s
(usa XUbuntu)
Enviado em 12/07/2017 - 13:48h
Oi.
Entendi, mas na verdade o problema não é exatamente as strings... Vou tentar explicar o que acontece com esse código:
O primeiro detalhe é que o operador
+ não concatena strings em PHP. Para concatenar strings é usado o operador
. ( ponto ).
Além disso, em PHP o tipo de um dado pode ser alterado dependendo do contexto, ou seja, se uma string aparece onde era esperado um valor numérico, ocorre um conversão. Exemplo:
$a = 2;
$b = "3";
echo $a * $b; #6
Nesse exemplo, $b é uma string, mas foi usada em um contexto numérico( uma multiplicação ) e ocorreu uma conversão de tipo. Como a string $b representa um número, o resultado de
echo $a * $b é um pouco mais previsível ou pelo menos é mais fácil perceber o que aconteceu... A string "3" foi usada na operação como o inteiro 3.
Porém, se a string não representar um número, o PHP tenta aproveitar o que for possível ou converte para zero. Por exemplo: No código do meu primeiro post, a conversão usa a parte numérica e ignora o resto das strings. Assim, esse código:
<?php
if( "2 cachorros" + "3 gatos" == "5 patos" ) {
echo "São iguais";
}
Com as conversões, pode ser entendido( apenas para compreensão ) como esse:
<?php
if( 2 + 3 == 5 ) {
echo "São iguais";
}
Um desenvolvedor acostumado com outra linguagem e que esteja começando seus estudos com PHP, pode acreditar que a linguagem não presta, pois recebeu um resultado que parece errado, mas na verdade não se trata disso... Apenas ele não conhecia as características do PHP, isso pode explicar um pouco da má fama entre desenvolvedores de outras linguagens?
Ainda assim, mesmo sabendo das conversões automáticas e que o operador de concatenação de strings da linguagem é o
.( ponto ) , não é esperado( violação do POLA ) que 2 cachorro + 3 gatos sejam iguais a 5 patos.
Linux Professional Institute - LPIC-1
Novell Certified Linux Administrator - CLA
Oracle Certified Associate, Java SE Programmer - OCA
http://twitter.com/p4ulodi4s
http://www.prminformatica.com.br/