Tecnología

Inicio

Las diferencias entre dos cadenas en una función de PHP

Las diferencias entre dos cadenas en una función de PHP


Para comparar cadenas en una función de PHP, por lo general puede usar una evaluación simple como "if ($ cadena1 == cadena2 $)." A veces, sin embargo, dos cadenas en una función PHP pueden tener diferencias sutiles entre ellos --- una consecuencia de la forma PHP trata a las variables; porque ningún tipo de datos se almacena con 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 las dos cadenas.

PHP Typing Variable

Los lenguajes de programación, como regla general, puede ser "fuerte" o "débil" con tipo. En un lenguaje fuertemente tipado, las variables tienen un tipo explícito --- como "entero" o "cadena". PHP es un lenguaje débilmente tipificado; la variable "$ var1 = 1.0" puede ser tratado como un entero, un número de coma flotante (si multiplica por un número decimal, por ejemplo) o una cadena (cuando se concatena con el operador "."), dependiendo de cómo se utiliza. PHP hace muy poco control variable, que es generalmente útil, ya que proporciona una flexibilidad adicional y elimina la necesidad de fundición. Por otra parte, en determinadas circunstancias, esto puede causar un comportamiento inesperado en su programación.

Los valores de cadena y Fundición

PHP soporta el uso de la fundición --- convertir una variable expresamente de un tipo a otro --- incluyendo el tipo de variable entre paréntesis antes de la variable se inicializa. Por ejemplo, "$ var2 = (string) $ var1" inicializa "$ var2" como una cadena explícita. PHP también permite la fundición cadena en la marcha por el uso de la "strval) (" función: el código "var3 $ = true" crea "$ var3" como una variable booleana. "Strval ($ var3)" tratará a esa misma variable booleana como una cadena, como por ejemplo en las comparaciones de cadenas o de las operaciones de subcadena.

comparaciones de series

A veces, la tipificación débil de PHP puede convertirse en un problema. Por ejemplo, consideremos el caso de "$ var1 = 1,0; $ var2 = 1 ;." Una comparación entre los dos PHP trata como iguales: if ($ var1 == $ var2) devolverá "verdad", porque por defecto PHP las trata como números. Esto sigue siendo cierto incluso ellos están envueltos en strval () funciones: si (strval ($ var1) == strval ($ var2)) también regresará "verdadero". Para comparar con precisión estas dos cadenas en una función de PHP, utilice el "===" comparación: if ($ var1 === $ var2) devolverá "falsa".

Objetos como cadenas

la disposición 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 se carga cada uno en una variable con la biblioteca incorporada "simplexml" de PHP, una comparación entre las dos variables volverá "falso" a pesar de que el valor de cadena es idéntica, porque cada uno lleva información sobre la jerarquía de 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 de la cadena única, sin la información del nodo adicional.