Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Error imprimiendo datos desde una clase con objetos

Estas en el tema de Error imprimiendo datos desde una clase con objetos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola. Estoy intentando hacer un ejercicio de clases, funciones y objetos, pero no termino de entender por que en el primer caso no me imprimen ...
  #1 (permalink)  
Antiguo 10/11/2010, 09:04
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Error imprimiendo datos desde una clase con objetos

Hola.

Estoy intentando hacer un ejercicio de clases, funciones y objetos, pero no termino de entender por que en el primer caso no me imprimen los datos que llamo si no pongo los "echo" dentro de la función:

Código PHP:
<?php

class Taxi {
    
    var 
$estado;
    var 
$pasajeros;
    var 
$subir_pasajeros;    
    
    function 
estado($pasajeros=0) { // Esto se ejecutará al instanciar la clase
        
if ($pasajeros<=0){
        
$this->estado "libre <br />";    
        
$this->subir_pasajeros $pasajeros;
    }
    elseif (
$pasajeros>0){
        
$this->estado "ocupado <br />";
        
$this->subir_pasajeros $pasajeros;
        }
    }
    
    function 
subir_pasajeros($pasajeros){
        if (
$pasajeros<=0){        
        
$this->estado "libre <br />";
        
$this->subir_pasajeros $pasajeros;
    }
    elseif (
$pasajeros>0){
        
$this->estado "ocupado <br />";
        
$this->subir_pasajeros $pasajeros;
        }
        
        }
}
$taxi = new Taxi();

echo 
$taxi->estado(); // Mostrará "libre"

$taxi->subir_pasajeros(3); // Suben 3 pasajeros al taxi

echo $taxi->estado(); // Mostrará "ocupado"*/

?>

La manera de imprimirlo tiene que ser así, pero si no pongo los "echo" no imprime nada.


Si los pongo en todos si imprime pero a la vez no le cambia el valor a estado en la segunda función cambiándolo a ocupado:

Código PHP:
<?php

class Taxi {
    
    var 
$estado;
    var 
$pasajeros;
    var 
$subir_pasajeros;    
    
    function 
estado($pasajeros=0) { // Esto se ejecutará al instanciar la clase
        
if ($pasajeros<=0){
        echo  
$this->estado "libre <br />";    
        
$this->subir_pasajeros $pasajeros;
    }
    elseif (
$pasajeros>0){
        echo 
$this->estado "ocupado <br />";
        
$this->subir_pasajeros $pasajeros;
        }
    }
    
    function 
subir_pasajeros($pasajeros){
        if (
$pasajeros<=0){
        echo 
$this->estado "libre <br />";
        
$this->estado "libre <br />";
        
$this->subir_pasajeros $pasajeros;
    }
    elseif (
$pasajeros>0){
        echo 
$this->estado "ocupado <br />";
        
$this->estado "ocupado <br />";
        
$this->subir_pasajeros $pasajeros;
        }
        
        }
}
$taxi = new Taxi();

echo 
$taxi->estado(); // Mostrará "libre"

$taxi->subir_pasajeros(3); // Suben 3 pasajeros al taxi

echo $taxi->estado(); // Mostrará "ocupado"*/

?>
imprime: libre, ocupado y nuevamente libre (que debería de salir ocupado) es decir el último estado a imprimir siempre coge el primero.

¿Estoy haciendo algo mal o me falta algo?

  #2 (permalink)  
Antiguo 10/11/2010, 09:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Error imprimiendo datos desde una clase con objetos

el punto es que php no imprime por arte de magia, en algún punto debes programar que imprima...

para dicho caso lo mejor es que los métodos devuelvan algún resultado con return para así imprimirlo por fuera del objeto y no dentro de el...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 10/11/2010, 09:21
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Error imprimiendo datos desde una clase con objetos

bueno es simple.. porque los IF dentro del método estado().. se refieren al parámetro del método y tu no le pasas ningún parámetro -.-!

verifica lo que digo con esto
$taxi->estado(0); // Mostrará "libre"

saludos.
__________________
More about me...
~ @rhyudek1
~ Github
  #4 (permalink)  
Antiguo 10/11/2010, 09:50
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: Error imprimiendo datos desde una clase con objetos

crea metodos get and set de tus variables, y luego funciones que hagan return, jamas imprimir ahi mismo ... y sobre todo hacer logica fuera de una funcion

ejem ..
Código PHP:
Ver original
  1. public function subirPasajeros($pasajeros)
  2. {
  3. if()
  4. return true; //Si este se subio
  5. else
  6. return false; //Si no esta ocupado
  7. }
  8.  
  9. Y fuera de cla clase, instancias el objeto
  10.  
  11. $obj = new Taxi();
  12.  
  13. if($obj->subirTaxi($pasajero))
  14. print "EL PASAJERO SE SUBIOo";
  15. else
  16. print "NO HAY MAS ESPACIO";

Es una idea tio, espero que lo entiendas
  #5 (permalink)  
Antiguo 10/11/2010, 10:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Tema movido desde PHP a Frameworks y PHP orientado a objetos
  #6 (permalink)  
Antiguo 10/11/2010, 10:08
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Error imprimiendo datos desde una clase con objetos

Cita:
Iniciado por pateketrueke Ver Mensaje
el punto es que php no imprime por arte de magia, en algún punto debes programar que imprima...

para dicho caso lo mejor es que los métodos devuelvan algún resultado con return para así imprimirlo por fuera del objeto y no dentro de el...
Cita:
Iniciado por Hidek1 Ver Mensaje
bueno es simple.. porque los IF dentro del método estado().. se refieren al parámetro del método y tu no le pasas ningún parámetro -.-!

verifica lo que digo con esto
$taxi->estado(0); // Mostrará "libre"

saludos.
hola de nuevo, he probado hacinedo que me devuelva el resultado con "return" para no poner los echos dentro y si se imprimen, incluso si pongo dentro de estado fuera un valor mayor a 0 ( echo $taxi->estado(5); por ejemplo) si me da ocupado:

Código PHP:
<?php

class Taxi {
    
    var 
$estado;
    var 
$pasajeros;
    var 
$subir_pasajeros;    
    
    function 
estado($pasajeros=0) { // Esto se ejecutará al instanciar la clase
        
if ($pasajeros<=0){
        return 
$this->estado "libre <br />";    
        
$this->subir_pasajeros $pasajeros;
    }
    elseif (
$pasajeros>0){
        return 
$this->estado "ocupado <br />";
        
$this->subir_pasajeros $pasajeros;
        }
    }
    

}
$taxi = new Taxi();

echo 
$taxi->estado(); // Mostrará "libre"
//$taxi->estado(0);

?>

Sin embargo en la segunda parte intento hacer aparte lo siguiente para probar y me da error ya que el método "estado" no está definido en este caso

Código PHP:
<?php

class Taxi {
    
    var 
$estado;
    var 
$pasajeros;
    var 
$subir_pasajeros;    
    
    function 
subir_pasajeros() {
        if (
$pasajeros<=0){
        return 
$this->estado "libre <br />";    
        
$this->subir_pasajeros $pasajeros;
    }
    elseif (
$pasajeros>0){
        return 
$this->estado "ocupado <br />";
        
$this->subir_pasajeros $pasajeros;
        }
        
        }

}
$taxi = new Taxi();

$taxi->subir_pasajeros(3); // Suben 3 pasajeros al taxi
echo $taxi->estado(); // Mostrará "ocupado"*/

?>
No entiendo como puedo llamarlo de esa forma sin que me de error.


Cita:
Iniciado por HiToGoRoShi Ver Mensaje
crea metodos get and set de tus variables, y luego funciones que hagan return, jamas imprimir ahi mismo ... y sobre todo hacer logica fuera de una funcion

ejem ..
Código PHP:
Ver original
  1. public function subirPasajeros($pasajeros)
  2. {
  3. if()
  4. return true; //Si este se subio
  5. else
  6. return false; //Si no esta ocupado
  7. }
  8.  
  9. Y fuera de cla clase, instancias el objeto
  10.  
  11. $obj = new Taxi();
  12.  
  13. if($obj->subirTaxi($pasajero))
  14. print "EL PASAJERO SE SUBIOo";
  15. else
  16. print "NO HAY MAS ESPACIO";

Es una idea tio, espero que lo entiendas

El problema es que tengo que hacer el ejercicio a partir de esta llamada:

Código:
$taxi = new Taxi();

echo $taxi->estado(); // Mostrará "libre"

$taxi->subir_pasajeros(3); // Suben 3 pasajeros al taxi

echo $taxi->estado(); // Mostrará "ocupado"*/
Saludos.
  #7 (permalink)  
Antiguo 10/11/2010, 11:49
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Error imprimiendo datos desde una clase con objetos

Igualmente uniendo lo anterior que había separado con las nuevas llamadas utilizando return me sigue sin coger el último valor de "subir_pasajeros" y me deja libre el estado por segunda vez:

Código PHP:
<?php

class Taxi {
    
    var 
$estado;
    var 
$pasajeros;
    var 
$subir_pasajeros;
    
    function 
estado($pasajeros=0) { // Esto se ejecutará al instanciar la clase
        
if ($pasajeros<=0){
        return 
$this->estado "libre <br />";    
        
$this->subir_pasajeros $pasajeros;
    }
    elseif (
$pasajeros>0){
        return 
$this->estado "ocupado <br />";
        
$this->subir_pasajeros $pasajeros;
        }
    }
    
    function 
subir_pasajeros() {
        if (
$pasajeros<=0){
        return 
$this->estado "libre <br />";    
        
$this->subir_pasajeros $pasajeros;
    }
    elseif (
$pasajeros>0){
        return 
$this->estado "ocupado <br />";
        
$this->subir_pasajeros $pasajeros;
        }
        
        }

}
$taxi = new Taxi();
echo 
$taxi->estado(); // Mostrará "libre" 
$taxi->subir_pasajeros(3); // Suben 3 pasajeros al taxi
echo $taxi->estado(); // Mostrará "ocupado"*/

?>
¿Sigo teniendo mal los parámetros?
  #8 (permalink)  
Antiguo 10/11/2010, 12:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Error imprimiendo datos desde una clase con objetos

El problema es que al llegar al return, la función sale de contexto y nunca ejecuta tus siguientes operaciones, deberías de leer un poco el manual de PHP, para que entiendas como es que funciona, si tu pones un return hasta ahí llega la función:
Código PHP:
Ver original
  1. function foo()
  2. {
  3.          return true;
  4.          echo "hi"; // nunca se va a ejecutar
  5. }
  6.  
  7. foo();

Saludos.
  #9 (permalink)  
Antiguo 10/11/2010, 12:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Error imprimiendo datos desde una clase con objetos

Aqui tienes un ejemplo simple corregido:
Código PHP:
Ver original
  1. class Taxi
  2. {
  3.     protected $_pasajeros = 0;
  4.    
  5.     public function getEstado()
  6.     {
  7.         if ($this->getPasajeros() <= 0) {
  8.             return 'libre';
  9.         } else {
  10.             return 'ocupado';
  11.         }
  12.     }
  13.    
  14.     public function subirPasajeros($nPasajeros)
  15.     {
  16.         $this->_pasajeros = $nPasajeros;
  17.     }
  18.    
  19.     public function getPasajeros()
  20.     {
  21.         return $this->_pasajeros;
  22.     }
  23. }
  24.  
  25. $taxi = new Taxi();
  26. echo $taxi->getEstado(); // libre
  27. $taxi->subirPasajeros(3);
  28. echo $taxi->getEstado(); // ocupado

Saludos.
  #10 (permalink)  
Antiguo 10/11/2010, 12:42
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Error imprimiendo datos desde una clase con objetos

Gracias GatorV, muy buen ejemplo.

Tengo que revisar a fondo las explicaciones ya que entre otras cosas veo parte del código que no conocía como public y protected. Estoy haciendo ejercicios de un manual de php 4 creo que del año 2004 así que tengo que aplicarme a muchas cosas nuevas.

Gracias a todos por la ayuda
  #11 (permalink)  
Antiguo 10/11/2010, 12:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Error imprimiendo datos desde una clase con objetos

Es la visibilidad de las variables, si estas leyendo uno del 2004, te recomiendo te actualices un poco, ha cambiado mucho el manejo de PHP Orientado a Objetos...
  #12 (permalink)  
Antiguo 12/11/2010, 05:52
Avatar de kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Error imprimiendo datos desde una clase con objetos

Gracias de nuevo GatorV, me actualizo desde ya

Etiquetas: clase, objetos
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




La zona horaria es GMT -6. Ahora son las 22:53.