Foros del Web » Programando para Internet » PHP »

Juego: "¿Dónde está el error?"

Estas en el tema de Juego: "¿Dónde está el error?" en el foro de PHP en Foros del Web. A ver si me animo a participar: Por qué? Porque en una comparación de ese tipo entre un entero y un string php convierte (o ...

  #181 (permalink)  
Antiguo 16/01/2011, 08:20
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Juego: "¿Dónde está el error?"

A ver si me animo a participar:
Por qué?
Porque en una comparación de ese tipo entre un entero y un string php convierte (o intenta convertir) el tipo del string (internamente, es decir, sólo durante la comparación) en entero. La conversión la realiza de una manera parecida a la que en javascript lo hace parseInt, es decir, si empieza con un número, asumirá ese número; si empieza con letra será 0 (en javascript sería NaN).
Cómo solucionarlo?
Hay otras maneras redundantes, pero la más sencilla es hacer una comparación de identidad, usando el operador === en lugar de ==
  #182 (permalink)  
Antiguo 16/01/2011, 08:26
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 10 meses
Puntos: 832
Respuesta: Juego: "¿Dónde está el error?"

Hay que usar el operador "===" para indicar que los valores deben ser idénticos, ya que actualmente el carácter no numérico es reconocido como un cero y pasa la comparación.
  #183 (permalink)  
Antiguo 16/01/2011, 08:27
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 10 meses
Puntos: 832
Respuesta: Juego: "¿Dónde está el error?"

Mierda ¿será que algún día podré contestar una a tiempo?

Jejeje
  #184 (permalink)  
Antiguo 16/01/2011, 08:55
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Juego: "¿Dónde está el error?"

Je, je. Igual tenías un error en la respuesta (el string no es reconocido como cero):
Código PHP:
<?php 
echo var_dump('3a'==0);//bool(false)
echo var_dump('3a'==3);//bool(true)
?>
  #185 (permalink)  
Antiguo 16/01/2011, 09:20
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 10 meses
Puntos: 832
Respuesta: Juego: "¿Dónde está el error?"

Dije "el carácter no numérico"
  #186 (permalink)  
Antiguo 16/01/2011, 09:26
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Juego: "¿Dónde está el error?"

Ja, ja, tenés razón
  #187 (permalink)  
Antiguo 16/01/2011, 14:17
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 10 meses
Puntos: 832
Respuesta: Juego: "¿Dónde está el error?"

Ahora a esperar hasta el 2035 para que Abimael valide el tiro.
  #188 (permalink)  
Antiguo 16/01/2011, 15:54
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: Juego: "¿Dónde está el error?"

Si lo que pasa que se entretiene con la vecina.... jejjejjeej
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #189 (permalink)  
Antiguo 16/01/2011, 21:32
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Juego: "¿Dónde está el error?"

, lo pasaron, Panino tu turno.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #190 (permalink)  
Antiguo 16/01/2011, 21:57
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Juego: "¿Dónde está el error?"

Demoños!!! llegue demasiado tarde!!!

A ver si no debo pagar tambien derechos de autor.
__________________
- León, Guanajuato
- GV-Foto
  #191 (permalink)  
Antiguo 17/01/2011, 00:40
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Juego: "¿Dónde está el error?"

Bueno, ahí va.
Si tenemos esto:
Código PHP:
<?php
$fn2
=function() use (&$var) {
    echo ++
$var.'<br />';        
};
$fn2();
$fn2();
$fn2();
?>
Recibiremos visualmente esta salida:
1
2
3
Ahora vamos a modificarlo un poco:
Código PHP:
<?php
function fn(){
    
$fn2=function() use (&$var) {
            echo ++
$var.'<br />';    
    };
}
fn();
fn();
fn();
?>
Y acá la pregunta sería: ¿cómo modificar esto, manteniendo la anidación de funciones, para que muestre una salida idéntica al ejemplo sin anidación, sin usar variables globales?
  #192 (permalink)  
Antiguo 17/01/2011, 00:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Juego: "¿Dónde está el error?"


Código PHP:
Ver original
  1. <?php
  2. function fn(){
  3.     static $var;
  4.     $fn2=function() use (&$var) {
  5.             echo ++$var.'<br />';    
  6.     };
  7.     $fn2();
  8. }
  9. fn();
  10. fn();
  11. fn();

Faltaba la llamada y hacer estática $var para que el valor sea el mismo como fuera de la función.
  #193 (permalink)  
Antiguo 17/01/2011, 00:48
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Juego: "¿Dónde está el error?"

Ja, ja! Grande, sí que fuiste rápido
Tu turno ;)
  #194 (permalink)  
Antiguo 17/01/2011, 00:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Juego: "¿Dónde está el error?"



A ver veamos uno que requiere conocimiento de PHP OO , el siguiente ejemplo:
Código PHP:
Ver original
  1. <?php
  2. class Foo {
  3.     public static function who() {
  4.         echo __CLASS__;
  5.     }
  6.     public static function test() {
  7.         self::who();
  8.     }
  9. }
  10.  
  11. class Bar extends Foo {
  12.     public static function who() {
  13.         echo __CLASS__;
  14.     }
  15. }
  16.  
  17. Bar::test();

Imprime 'Foo', alguién puede explicar el porque, y que haría falta para que Bar::test() (con el código como esta) imprimiera 'Bar'.
  #195 (permalink)  
Antiguo 17/01/2011, 02:16
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Juego: "¿Dónde está el error?"

A ver:
Imprime Foo porque al ser test un método estático self sigue haciendo referencia a la clase base.
Para que imprima Bar hay que sobreescribir el método test:
Código PHP:
<?php
class Foo {
    public static function 
who() {
        echo 
__CLASS__;
    }
    public static function 
test() {
        
self::who();
    }
}
 
class 
Bar extends Foo {
    public static function 
who() {
        echo 
__CLASS__;
    }
     public static function 
test() {
        
self::who();
    }
}
 
Bar::test();
  #196 (permalink)  
Antiguo 17/01/2011, 09:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Juego: "¿Dónde está el error?"

Mmm no, hay una característica especial de PHP que nos permite no tener que hacer eso (aparte hacer otras cosas, como una clase Singleton y que otras hereden de esta)
  #197 (permalink)  
Antiguo 17/01/2011, 09:43
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Juego: "¿Dónde está el error?"

Usando static en lugar de self.

El porqué:
http://php.net/manual/en/language.oo...c-bindings.php
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #198 (permalink)  
Antiguo 17/01/2011, 09:50
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Juego: "¿Dónde está el error?"

No conocía esa característica.
  #199 (permalink)  
Antiguo 17/01/2011, 10:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Juego: "¿Dónde está el error?"

bien por David, es tu turno.

Como offtopic aquí hay una implementación para poder heredar el patrón Singleton:
Código PHP:
Ver original
  1. <?php
  2. class A
  3. {
  4.     private static $_instance;
  5.  
  6.     public static function getInstance()
  7.     {
  8.         if (self::$_instance == null) {
  9.             self::$_instance = new static();
  10.         }
  11.        
  12.         return self::$_instance;
  13.     }
  14. }
  15.  
  16. class B extends A
  17. {
  18.     private $_bar = 'foo';
  19. }
  20.  
  21. $obj = B::getInstance();
  22. var_dump($obj);
  #200 (permalink)  
Antiguo 17/01/2011, 11:44
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Juego: "¿Dónde está el error?"

Y perdona mi ignorancia, pero ¿qué uso tiene heredar el patrón singleton?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #201 (permalink)  
Antiguo 17/01/2011, 11:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Juego: "¿Dónde está el error?"

Pues el no tener que declararlo en cada clase que quieres implementarlo, era algo que antes PHP5.2 y menores no podían hacerlo ya que self() siempre se refería a la clase donde fue declarado.

Es un simple efecto de como funciona static() vs self().
  #202 (permalink)  
Antiguo 17/01/2011, 11:58
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Juego: "¿Dónde está el error?"

Oooohhhhh, voy a tener que leer bien el libro que me indicaste entonces
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #203 (permalink)  
Antiguo 17/01/2011, 19:27
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: Juego: "¿Dónde está el error?"

Hola como están todos... Me llego un correo de JavaCup 2011 y no se si con tiempo se podría implementar algo parecido para php...

http://javacup.javahispano.org/rule/show
este es la dirección...
Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #204 (permalink)  
Antiguo 17/01/2011, 20:12
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Juego: "¿Dónde está el error?"

Dado el siguiente código:
Código PHP:
Ver original
  1. $foo = new Foo();
  2. var_dump($foo instanceof Bar);
Mencione tres casos en que la salida será:
Cita:
bool(true)
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #205 (permalink)  
Antiguo 17/01/2011, 22:21
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Juego: "¿Dónde está el error?"

A ver:
1)
Código PHP:
class Bar{
    
}
class 
Foo extends Bar{
    

2)
Código PHP:
class Bar{
    public static function 
getInstance(){
        return new 
self();    
    }
}
class 
Foo extends Bar{
    function 
__construct(){
        
parent::getInstance();
    }

3)
Código PHP:
class Bar{
    
}
class 
Foo extends Bar{
    function 
__construct(){
        return new 
Bar;
    }

  #206 (permalink)  
Antiguo 17/01/2011, 22:41
 
Fecha de Ingreso: agosto-2006
Mensajes: 125
Antigüedad: 17 años, 8 meses
Puntos: 1
Respuesta: Juego: "¿Dónde está el error?"

para que imprima de A hasta Z le agrgue un ucfrisrt a la respúesta de ...
<?
function imprimirAlfabeto() {
for ($i = ord('a'); $i <= ord('z'); $i++){

echo ucfirst(chr($i)). ' ';

}
}
imprimirAlfabeto();
  #207 (permalink)  
Antiguo 18/01/2011, 03:19
 
Fecha de Ingreso: mayo-2008
Mensajes: 117
Antigüedad: 15 años, 11 meses
Puntos: 8
Respuesta: Juego: "¿Dónde está el error?"

Panino tecnicamente das 3 veces la misma respuesta..
ai va mi solución:

Código PHP:
class Bar
     

class 
Foo extends Bar
     
}

$foo = new Foo();
var_dump($foo instanceof Bar);  


interface 
Bar
{

}
class 
Foo implements Bar

}
  
$foo = new Foo();
var_dump($foo instanceof Bar);


interface 
Bar
{

}
class 
pep implements Bar{

}
class 
Foo extends pep

}

$foo = new Foo();
var_dump($foo instanceof Bar); 
A ver que tal.. de todas formas Panino cumple las condiciones...
  #208 (permalink)  
Antiguo 18/01/2011, 06:29
 
Fecha de Ingreso: mayo-2008
Mensajes: 117
Antigüedad: 15 años, 11 meses
Puntos: 8
Respuesta: Juego: "¿Dónde está el error?"

Cawen la diferencia de horario.. venga despertaos .. xD

Última edición por harryp; 18/01/2011 a las 06:35
  #209 (permalink)  
Antiguo 18/01/2011, 06:51
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Juego: "¿Dónde está el error?"

En ambas respuestas sólo se mencionan 2 casos (aunque de diferente forma, pueden considerarse el mismo "caso"): 1) Cuando Foo tiene una relación de herencia con Bar 2) Cuando Foo implementa o hereda de una clase que implemente la interfaz Bar
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #210 (permalink)  
Antiguo 18/01/2011, 10:02
 
Fecha de Ingreso: mayo-2008
Mensajes: 117
Antigüedad: 15 años, 11 meses
Puntos: 8
Respuesta: Juego: "¿Dónde está el error?"

creo que lo tengo....

Código PHP:
class Foo{

}
class_alias('Foo''bar');
$foo=new Foo();

var_dump($foo instanceof bar); 

Etiquetas: a-por-la-vecina-de-meta, juegos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 40 personas




La zona horaria es GMT -6. Ahora son las 10:42.