La función empty de PHP está mal

Una cosa que se suele hacer bastante en javascript es resetear un formulario, es decir, devolver el formulario a su valor inicial.

Con jquery esto es bastante fácil:


$(

Trackback URL

  1. Alejandro Morales Meza
    05/05/2010 at 11:45 am Permalink

    Hola! Creo que la lógica del asunto está en que PHP es un lenguaje no tipado, y al pasar «0» a la construcción del lenguaje «empty» el no puede hacer diferencia entre «0» y 0. Esta es la razón por la que para ambos casos el resultado es TRUE.

  2. Pau Sanchez
    06/05/2010 at 12:18 am Permalink

    @Alejandro, PHP es no tipado, efectivamente, pero el significado de «0» y de 0 es totalmente distinto. Sea tipado, o no tipado.

    Precisamente porque es un lenguaje no tipado, puedes preguntar de que tipo es la variable, y si es un string, considerarlo como cadena no vacia (puesto que no lo es), pero si es un 0 numérico, entonces considerarlo vacio.

    Para mi, está mal el concepto. «0» no es una cadena vacia, es una cadena con el caracter ‘0’. Si quieres que se interprete como un entero, entonces debería ser problema del programador.

    Te pongo un ejemplo, si la función empty funcionara como describí en este artículo, entonces, lo lógico para alquien que quisiera usar empty tal cual funciona ahora, es hacer un cast a entero primero, y luego preguntar si está vacio. Y ya está, todo sería coherente.

    Saludos!

  3. Alejandro Morales Meza
    28/05/2010 at 2:22 pm Permalink

    Hola Amigo.

    Tiene sentido lo que dices. Estuve probando algunas cosas y me parecio curioso que para empty(), la cadena «0» es vacío, pero la cadena «00» no lo es. ¿Qué piensas al respecto?

  4. Pau Sanchez
    28/05/2010 at 11:18 pm Permalink

    @Alejandro Básicamente los programadores de PHP pensaron en implementar empty para que cazara los «0» como empty, imagino que para facilitarles la vida a algunos programadores… Esa implementación es totalmente intencional, y me parece que tomaron una mala decisión, ya que como he dicho y repetido varias veces, una cadena que tiene un caracter, sea cual sea ese caracter, no es una cadena vacia.

    Obviamente «00» no tiene que ser vacía, y ellos sólo interpretan como vacía la cadena ‘0’.

  5. Elihu D.
    09/06/2015 at 6:57 am Permalink

    Creo que en la práctica ni «0» ni 0 deberían considerarse empty.