Quiz sobre PHP - rarezas del lenguaje
Por: alex | 4 Octubre 2006 | Ver comentarios |
Qué muestra la siguiente porción de código?
<?php $variable = 'demo'; if ( $variable > 0 ) echo 'foo'; if ( ! $variable > 0 ) echo 'bar'; echo 'baz'; ?>
Por: alex | 4 Octubre 2006 | Ver comentarios |
Qué muestra la siguiente porción de código?
<?php $variable = 'demo'; if ( $variable > 0 ) echo 'foo'; if ( ! $variable > 0 ) echo 'bar'; echo 'baz'; ?>
menéame añadir a del.icio.us digg it
Puedes usar las etiquetas <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> . Para formatear código encierra el mismo entre elementos [lang]código[/lang], donde lang puede ser: css, javascript, php, html, csharp, vbnet, sql o code.
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
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
YoNoSoyTu
4 de Octubre de 2006, 08:51:09 pm
No se si ‘foo’ o ‘bar’ lo muestra (para mi que no)… pero ‘baz’ seguro que lo muestra.
HPNeo
4 de Octubre de 2006, 09:05:22 pm
Muestra: barbaz…?
alex
4 de Octubre de 2006, 09:38:29 pm
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
$variabledebería recibir solamente números, pero por algún descuido, esta variable no fue explícitamente convertida a un número.kesar
5 de Octubre de 2006, 08:15:58 am
solo devolverá baz, pues $variable no es ni mayor ni menor que 0, es distinto
Leonel
5 de Octubre de 2006, 09:50:07 am
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!!
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….
alex
5 de Octubre de 2006, 12:50:00 pm
Carlos, tómalo con calma…, si crees que es estúpido hacer eso, simplemente no te tomes la molestia en comentar el post.
alex
5 de Octubre de 2006, 01:07:58 pm
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’.Jersson
6 de Octubre de 2006, 01:52:51 am
que problema trabajar con lenguajes sin tipos explicitos.
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).
Antares
19 de Octubre de 2006, 07:05:00 pm
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”.
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
nicolas
20 de Marzo de 2007, 10:57:00 am
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