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

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.