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

Array con Clases

Estas en el tema de Array con Clases en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Tengo un problema con unos arrays dentro de una clase xD... Código PHP: ..... ..... public  $armas  = array(); public  $vestimenta  = array(); .... function .... { $this -> ...
  #1 (permalink)  
Antiguo 05/10/2006, 12:19
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Array con Clases

Tengo un problema con unos arrays dentro de una clase xD...

Código PHP:

.....
.....

public 
$armas = array();
public 
$vestimenta = array();

....

function .... {

$this->armas $armas// Linea 20
$this->ropas $vestimenta// Linea 21

...

// Luego hago esto...

// Armas
$this->armas['Principal'] = "Navaja";
$this->armas['Secundaria'] = "Piedra";
// Vestimenta
$this->ropas['Cabeza'] = "Gorro de papel";
$this->ropas['Pecho'] = "Polera";
$this->ropas['Piernas'] = "Pantalon de papel";
$this->ropas['Pies'] = "Sandalias";

echo 
$this->ropas['Cabeza'];
}

// Y la función la llamo así...

$personaje = new Personaje();
$personaje->habilidadPersonaje(); 
Y me da este error...

Código:
Notice: Undefined variable: armas in ... on line 20

Notice: Undefined variable: vestimenta ... on line 21
No logro escribir el contenido del array "ropas" ni el de "armas"...

Ayúdenme... Con clases estoy aprendiendo recién... Gracias :)
  #2 (permalink)  
Antiguo 05/10/2006, 12:33
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
Código PHP:
$this->armas $armas// Linea 20
$this->ropas $vestimenta// Linea 21 
Eso para que lo haces? $armas de donde viene? $vestimenta de donde viene? si especificas de donde generas esas variables a lo mejor te podria ayudar a verificar tu error.
  #3 (permalink)  
Antiguo 05/10/2006, 12:34
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
A ver... Es que abrevié todo el código xD...

Código PHP:
class Personaje
{
    public 
$tipo;
    public 
$habilidad "15";
    public 
$velocidad "30";
    public 
$vida "200";
    public 
$golpe "10";
    public 
$dinero "0.00";
    public 
$nivel "2";
    public 
$armas = array();
    public 
$vestimenta = array();

    public function 
habilidadPersonaje($tipo)
    {
        
$this->tipo $tipo;
        
$this->nivel $nivel;
        
$this->armas $armas;
        
$this->ropas $vestimenta;
        
        switch(
$this->tipo)    {
            case 
'Knight':
                if((
$this->nivel>1) && ($this->nivel<=5))    {
                    
$this->habilidad $this->habilidad// No lo modificamos
                    // Armas
                    
$this->armas['Principal'] = "Navaja";
                    
$this->armas['Secundaria'] = "Piedra";
                    
// Vestimenta
                    
$this->ropas['Cabeza'] = "Gorro de papel";
                    
$this->ropas['Pecho'] = "Polera";
                    
$this->ropas['Piernas'] = "Pantalon de papel";
                    
$this->ropas['Pies'] = "Sandalias";
                }
            break;
        }
    }
}

$personaje = new Personaje();
$personaje->habilidadPersonaje('Knight'); 
xD... Si tengo algún otro error, o hay forma de simplificar lo que tengo, please dime como hacerlo... Nos vemos y gracias :)
  #4 (permalink)  
Antiguo 05/10/2006, 12: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
Código PHP:
        $this->nivel $nivel;
        
$this->armas $armas;
        
$this->ropas $vestimenta
Esa parte en tu metodo habilidadPersonaje no la necesitas (al inicio de tu clase), ya que al momento de llamar al metodo habilidadPersonaje, $nivel, $armas, $vestimenta, son nulas o no existen, y se las estas asignando a tus variables de tu clase $nivel, $armas y $vestimenta.

Recuerda cuando usamos la sintaxis $this->nivel, nos estamos refiriendo a la variable de la clase y no a la variable dentro de la funcion (esa es local), asi que solo usa tu clase de la forma que la ocupas.

Otro tip es asignar variables por defecto en el constructor, lo que podrias hacerlo asi:
Código PHP:
class Personaje
{
    public 
$tipo;
    public 
$habilidad;
    public 
$velocidad;
    public 
$vida;
    public 
$golpe;
    public 
$dinero;
    public 
$nivel;
    public 
$armas;
    public 
$vestimenta;
    
    public function 
__construct() {
           
$this->habilidad "15";
           
$this->velocidad "30";
           
$this->vida "200";
           
$this->golpe "10";
           
$this->dinero "0.00";
           
$this->nivel "2";
           
$this->armas = array();
           
$this->vestimenta = array();
    }

    public function 
habilidadPersonaje($tipo)
    {
        
$this->tipo $tipo;
        
        switch(
$this->tipo)    {
            case 
'Knight':
                if((
$this->nivel>1) && ($this->nivel<=5))    {
                    
//$this->habilidad = $this->habilidad; // No lo modificamos
                    // Armas
                    
$this->armas['Principal'] = "Navaja";
                    
$this->armas['Secundaria'] = "Piedra";
                    
// Vestimenta
                    
$this->ropas['Cabeza'] = "Gorro de papel";
                    
$this->ropas['Pecho'] = "Polera";
                    
$this->ropas['Piernas'] = "Pantalon de papel";
                    
$this->ropas['Pies'] = "Sandalias";
                }
            break;
        }
    }
}

$personaje = new Personaje();
$personaje->habilidadPersonaje('Knight'); 
  #5 (permalink)  
Antiguo 05/10/2006, 12:47
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Wow!... Te pasaste... Muchísimas gracias...

Código:
Recuerda cuando usamos la sintaxis $this->nivel, nos estamos refiriendo a la variable de la clase y no a la variable dentro de la funcion (esa es local), asi que solo usa tu clase de la forma que la ocupas.
Eso no lo tenía claro... Muchas gracias :)
  #6 (permalink)  
Antiguo 05/10/2006, 13:09
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Bueno... Ahora tengo una duda... Yo sé que para devolver valores, es decir, en caso de cambiar el valor de una variable en una función, y este valor se mantenga para utilizarla con otra clase o en otra parte, se utiliza "Return $this->variable"

Como yo estoy utilizando arrays, quisiera saber, como devolver los valores del array...

Código PHP:
    public function objetosPersonaje()
    {
        switch(
$this->tipo)    {
        case 
'Knight':
            if((
$this->nivel>1) && ($this->nivel<=5))    {
                
$this->habilidad $this->habilidad// No lo modificamos
                // Armas
                
$this->armas['Principal']['tipo'] = "Navaja";
                
$this->armas['Principal']['nivel'] = "1";
                
$this->armas['Principal']['dano'] = "10";
                
$this->armas['Principal']['defensa'] = "5";
                    
                
$this->armas['Secundaria'] = "Piedra";
                
$this->armas['Secundaria']['nivel'] = "0"// Es piedra... No tiene nivel xD
                
$this->armas['Secundaria']['dano'] = "5";
                
$this->armas['Secundaria']['defensa'] = "0";
                    
                    
// Vestimenta
                
$this->ropas['Cabeza'] = "Gorro de papel";
                
$this->ropas['Pecho'] = "Polera";
                
$this->ropas['Piernas'] = "Pantalon de papel";
                
$this->ropas['Pies'] = "Sandalias";
            }
        break;
        }
    } 
Hice unos cambios... Quiero utilizar todos esos datos en otra función, por eso preguntaba por lo del return, pero no voy a estar poniendole un return por cada linea que le asigno al array...

Como lo hago??? Gracias :)
  #7 (permalink)  
Antiguo 05/10/2006, 13:20
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Ya lo solucioné... Simplemente tenía que hacer "return $this->armas;" y "return $this->ropas;" xD... Sorry por las molestias xD
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 04:37.