Para comparar cadenas en una función de PHP , por lo general puede usar una simple evaluación como " if ($ cadena1 == cadena2 $ ) . " A veces , sin embargo, dos cadenas en una función de PHP puede tener diferencias sutiles entre ellos --- una consecuencia de la forma en que trata a las variables de PHP , ya que ningún tipo de datos se almacena en la variable , PHP permite comparaciones de cadenas , incluso cuando una comparación de cadenas sería inapropiado y, a veces muestra un comportamiento extraño cuando se trata de comprobar si hay diferencias entre dos secuencias. PHP Typing
Lenguajes de programación variable , por regla general, pueden ser "muy " o " débil " escrito . En un lenguaje fuertemente tipado , las variables tienen un tipo explícito --- como "entero " o "string ". PHP es un lenguaje de tipos débiles , la variable " $ var1 = 1.0 " puede ser tratado como un entero, un número de punto flotante (si multiplica por un decimal, por ejemplo) o una cadena ( al concatenarse con el operador ".") dependiendo de cómo se utiliza . PHP hace muy poco de control variable, lo que generalmente es útil porque proporciona una flexibilidad adicional y elimina la necesidad para la fundición . Por otra parte , en determinadas circunstancias , esto puede provocar un comportamiento inesperado en su programación.
Valores de cadena y Colado
PHP soporta el uso de fundición --- conversión una variable expresamente de un tipo a otro --- incluyendo el tipo de variable de paréntesis, antes de inicializar la variable. Por ejemplo , "$ var2 = ( string) $ var1 " inicializa "$ var2 " como una cadena explícita. PHP también permite on- the-fly cadena de fundición mediante el uso del " strval () " función de : el código "$ var3 = true" crea "$ var3 " como una variable booleana. " strval ($ var3 ) " tratará esa misma variable booleana en forma de cadena , por ejemplo, en las comparaciones de cadenas u operaciones de subcadena .
comparaciones de cadenas
veces , débil tipificación de PHP puede convertirse en un problema. Por ejemplo, considere el caso de "$ var1 = 1.0 , $ var2 = 1 ; ". Una comparación entre los dos PHP las trata como iguales: if ($ var1 == $ var2 ) devolverá "true ", porque por defecto PHP las trata como números. Esto sigue siendo cierto incluso se envuelven en strval () funciones: if ( strval ($ var1 ) == strval ($ var2 ) ) también devolverá "true ". Para comparar con precisión estas dos cadenas en una función de PHP , use el " === " comparación : if ( $ var1 === $ var2 ) devolverá " falso".
Objetos como cadenas < br Consentimiento>
de PHP para convertir variables sobre la marcha también puede causar problemas al usar objetos . Por ejemplo, considere un documento XML que contiene la misma cadena (por ejemplo, un nombre como " John Doe ") en dos lugares. Si carga cada uno en una variable de PHP biblioteca integrada " simplexml " , una comparación entre las dos variables devolverá "false" a pesar de que el valor de la cadena es idéntica , porque cada uno lleva información sobre la jerarquía XML y los dos son técnicamente diferentes porque se encuentran en diferentes partes del archivo XML. En este caso, strval () vendrá al rescate mediante la devolución sólo la cadena, sin la información del nodo adicional.