Anuncia aquí

Quiz sobre PHP – rarezas del lenguaje

Qué muestra la siguiente porción de código?

php:
<?php

$variable = 'demo';

if ( $variable > 0 )
        echo 'foo';

if ( ! $variable > 0 )
        echo 'bar';

echo 'baz';

?>

Esta entrada fue publicada en PHP, Quiz

15 Comentarios

  1. 1 Carlos Montalvo (4 de octubre de 2006, 07:39:40 pm)

    Despues me dices si yo estoy sano...

    if ( $variable > 0 )

    $a > $b | Mayor que | TRUE si $a es estrictamente mayor que $b.

    demo es > ke 0 ? :S

    no seria

    if ( strlen($variable) > 0 )

    es por el tipo de datos creo... si no comprueba poniendo esto

    $variable = 1;

    ahi si la condicion si muestra
    foobaz

    8) saludos...

  2. 2 Carlos Montalvo (4 de octubre de 2006, 08:15:00 pm)

    Se deveria llamar como no se deve hacer con el lenguaje....

    como vas a comparar una palabra con un numero... :s

    mejor hubieses puesto


    if ( $variable )

    o


    if ( !is_null($variable) )

    no creess :s

  3. 3 YoNoSoyTu (4 de octubre de 2006, 08:51:09 pm) http://ruido-blanco.net/blog/

    No se si 'foo' o 'bar' lo muestra (para mi que no)... pero 'baz' seguro que lo muestra.

  4. 4 HPNeo (4 de octubre de 2006, 09:05:22 pm) http://hpneo.blogia.com

    Muestra: barbaz...?

  5. 5 alex (4 de octubre de 2006, 09:38:29 pm) http://www.buayacorp.com

    Carlos: El "quiz" es simplemente una versión muy simplificada de un problema que existía en una aplicación en la que estoy trabajando. El hecho es que en teoría $variable debería recibir solamente números, pero por algún descuido, esta variable no fue explícitamente convertida a un número.

  6. 6 kesar (5 de octubre de 2006, 08:15:58 am) http://www.kesar.org

    solo devolverá baz, pues $variable no es ni mayor ni menor que 0, es distinto :)

  7. 7 Leonel (5 de octubre de 2006, 09:50:07 am) http://www.leonelquinteros.com

    En un principio solo muestra "baz"

    $variable NO es mayor a 0. De hecho creo que al compararse un string con un número, automáticamente se hace el casting del string y calculo que 'demo' obtiene un valor numérico de 0.

    El problema de ese código, es que el operador de negación se está aplicando a $variable y no a la comparación.
    Para que muestre 'barbaz' como interpreto que se quería mostrar con ese código (muy subjetivo) habría que reformular el 2º if de la siguiente manera:

    if ( ! ( $variable > 0 ) )

    Saludos!!

  8. 8 Carlos Montalvo (5 de octubre de 2006, 12:09:38 pm)

    :-s eso hubieses puesto antes de mandar un codigo... el problema en esi es el tipo de datos nada mas....

  9. 9 alex (5 de octubre de 2006, 12:50:00 pm) http://www.buayacorp.com

    Carlos, tómalo con calma..., si crees que es estúpido hacer eso, simplemente no te tomes la molestia en comentar el post.

  10. 10 alex (5 de octubre de 2006, 01:07:58 pm) http://www.buayacorp.com

    Leonel: La segunda condición fue puesta intencionalmente, lo que en realidad llega a compararse es [false > 0] o lo que es lo mismo [0 > 0].

    En cuanto a la primera, no tengo idea del valor que llegaría a tomar $variable, porque si se hace un cast a boolean del valor actual de $variable, la condición resultante es verdadera (true > 0) y por lo tanto imprimiría 'foo'.

  11. 11 Jersson (6 de octubre de 2006, 01:52:51 am) http://jerssoft.blogspot.com

    que problema trabajar con lenguajes sin tipos explicitos.

  12. 12 Ympostor (8 de octubre de 2006, 11:12:41 am)

    Exactamente Jersson! Estos personajes aún no saben el enorme ahorro de dolores de cabeza que supone trabajar con un lenguaje estáticamente tipado (ejemplos: Eiffel, C#, Java).

  13. 13 Antares (19 de octubre de 2006, 07:05:00 pm) http://usuarios.lycos.es/pulsar02/

    Pues a mi me sigue gustando mucho mas mi php (4 eso si). Si no quieren comeduras de cabeza ahy un buen is_nan() para probar si es un numero. y por cierto.. si lo ejecutas sale solo "baz".

  14. 14 Seth (9 de febrero de 2007, 01:27:20 am)

    Primero lean como funciona PHP con la comparacion entre tipos de datos antes de opinar e insultarse unos a otros.

    Por algo PHP implementa 2 operadores de comparacion (== y ===)

    PHP usando == toma las cadenas como "algo" y "algo" es mayor a 0. Hay que revisar como se comporta >. No estoy seguro si existe un operador >== (puesto que >= significa otra cosa), pero no creo. Para mi que imprime las 3 cadenas. No he hecho la prueba

  15. 15 nicolas (20 de marzo de 2007, 10:57:00 am) http://www.nicoandra.com.ar

    Fácil

    0 )
    echo 'foo';

    //$variable negada, es falso, o cero. Por lo tanto, no entra a este if tampoco.
    if ( ! $variable > 0 )
    echo 'bar';

    // muestra baz
    echo 'baz';
    ?>

    Otra cosa hubiese sido si el segundo if era asi:

    if (!($variable > 0))
    $variable no es mayor a cero, entonces es falso; pero con la negacion se transforma en verdadero, por lo que hubiese escrito
    barbaz

Publicar un Comentario

Tu email nunca será publicado o compartido. Los campos requeridos están marcados con un *

*
*

Puedes usar estas etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>