¿Por qué las cadenas se comportan como una matriz en PHP 5.3?
arrays string (1)
Tengo este codigo
$tierHosts[''host''] = isset($host[''name'']) ? $host[''name''] : $host;
Funciona bien en PHP 5.5, pero en PHP 5.3 la condición devuelve true mientras que $host
contiene una cadena como pjba01
. Devuelve la primera letra de $tierHosts[''host'']
, es decir, p
.
¿Qué tiene de malo mi código?
Puede acceder a cadenas como una matriz y las compensaciones anteriores de PHP 5.4, como su name
se convirtieron silenciosamente en 0, significa que accedió al primer carácter de esa cadena:
character | p | j | b | a | 0 | 1 | ----------------------------------- index | 0 | 1 | 2 | 3 | 4 | 5 |
Después de la 5.3, dichas compensaciones emitirán un aviso, como también puede leer en el manual:
A partir de PHP 5.4, las compensaciones de cadena deben ser enteros o cadenas de tipo entero, de lo contrario se emitirá una advertencia. Anteriormente, un desplazamiento como "foo" se convertía silenciosamente en 0.