Categories
PHP Quiz

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';

?>

15 replies on “Quiz sobre PHP – rarezas del lenguaje”

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...

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

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.

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!!

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

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

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'.

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).

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

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

Comments are closed.