Concatenación de número de serie php en mal estado

Tengo un código php aquí:

 

que produce 234,

pero cuando agrego un número 11 antes de “hola”:

  

Emite 1334 en lugar de 245 (lo que esperaba), ¿por qué?

Eso es extraño…

Pero

  

O

  

problema de fijación.


UPDv1:

Finalmente logró obtener la respuesta adecuada:

'hello' = 0 (no contiene dígitos iniciales, PHP asume que es cero).

Así que 'hello' . 1 + 2 'hello' . 1 + 2 simplifica a 'hello1' + 2 es 2 , porque los dígitos 'hello1' en 'hello1' son cero.


'11hello ' = 11 (contiene los dígitos '11hello ' , por lo que PHP asume que es once).

Entonces '11hello ' . 1 + 2 '11hello ' . 1 + 2 simplifica a '11hello 1' + 2 ya que 11 + 2 es 13 .


UPDv2:

http://www.php.net/manual/en/language.types.string.php

El valor viene dado por la porción inicial de la cadena. Si la cadena comienza con datos numéricos válidos, este será el valor utilizado. De lo contrario, el valor será 0 (cero). Los datos numéricos válidos son un signo opcional, seguido de uno o más dígitos (que contienen opcionalmente un punto decimal), seguidos por un exponente opcional. El exponente es una ‘e’ o ‘E’ seguidas por uno o más dígitos.

El operador punto tiene la misma precedencia que + y -, lo que puede producir resultados inesperados.

Eso técnicamente responde a tu pregunta … si quieres que los números se traten como números durante la concatinación simplemente envuélvelos entre paréntesis.

  

tienes que usar () en operación matemática

 echo 'hello ' . (1 + 2) . '34'; // output hello334 echo '11hello ' . (1 + 2) . '34'; // output 11hello334 

Debe consultar la tabla de conversión de tipo PHP para obtener una mejor idea de lo que ocurre detrás de las escenas: http://php.net/manual/en/types.comparisons.php

Si odias poner operadores entre ellos, asignarlos a

 $var = 1 + 2; echo 'hello ' . $var . '34';