es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo acceder a la propiedad protegida de una clase en un método de interfaz redefinido?

Tengo una clase que implementa una interfaz.

interface Animal {
public static function giveHug();
}

class Dog() implementa Animal {

protegido $raza;

public function __construct($raza)
{
    $this->raza = $raza;
}

public static function giveHug()
{
    return 'Besa a mi amigo' . $this->raza;
}

}

Obtengo el error: no se puede usar $this en un contexto no objeto.

Y entiendo eso, ¿cómo podría obtener la propiedad de Dog en mi método giveHug redefinido? ¿Alguien tiene algún truco para ayudar? Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como giveHug() es un método estático, no puede acceder a las propiedades del objeto utilizando la palabra clave $this. Una forma de acceder a la propiedad $race en el método giveHug() es declarándolo como una propiedad estática.

    interface Animal {
        public static function giveHug();
    }
    
    class Dog implements Animal {
    
        protected static $race;
    
        public function __construct($race)
        {
            self::$race = $race;
        }
    
        public static function giveHug()
        {
            return 'Kiss my friend ' . self::$race;
        }
    }
    
    $dog = new Dog('Poodle');
    echo Dog::giveHug(); // Salida: Kiss my friend Poodle
    

    Aquí, hemos declarado $race como una propiedad estática utilizando protected static $race y establecimos su valor en el constructor utilizando self::$race = $race. En el método giveHug(), hemos accedido a la propiedad $race con self::$race. Finalmente, al invocar el método giveHug(), hemos utilizado el nombre de la clase Dog::giveHug() en lugar de la instancia del objeto.

Comments are closed.