[英]How to access protected variable of class inside static method of the same class?
[英]How to access to the protected property of class in redefined interface method?
我有一個實現接口的 class 。
interface Animal {
public static function giveHug();
}
class Dog() implements Animal {
protected $race;
public function __construct($race)
{
$this->race = $race;
}
public static function giveHug()
{
return 'Kiss my friend' . $this->race;
}
}
我明白了
不能在非 object 上下文中使用 $this。
我明白這一點,那么如何在我重新定義的giveHug方法中獲得 Dog 屬性? 有人有什么技巧可以幫忙嗎? 謝謝
無論哪種方式,您都需要更改代碼。
如果::giveHug
必須是 static,那么您需要能夠提供要擁抱的Animal
。
所以這有效:
但不是很好
interface Animal
{
public static function giveHug(Animal $animal);
}
class Dog implements Animal
{
protected $race;
public function __construct($race)
{
$this->race = $race;
}
public static function giveHug(Animal $animal)
{
return 'Kiss my friend ' . $animal->race;
}
}
$dog = new Dog('WauWau');
echo Dog::giveHug($dog) . PHP_EOL;
// Kiss my friend WauWau
這個更好:
interface Animal
{
public static function getRace();
public static function giveHug(Animal $animal);
}
class Dog implements Animal
{
protected static $race;
public function __construct($race)
{
self::$race = $race;
}
public static function getRace()
{
return self::$race;
}
public static function giveHug(Animal $animal)
{
return 'Kiss my friend ' . $animal::getRace();
}
}
$dog = new Dog('WauWau');
echo Dog::giveHug($dog) . PHP_EOL;
// Kiss my friend WauWau
但是現在進入主題:這有意義嗎?
不。
這是一個非常好的例子。
您不要告訴“靜態”動物(或狗)擁抱。
你會想告訴一個特定的(物體)動物給一個擁抱。
所以這更有意義:
interface Animal
{
public function giveHug();
}
class Dog implements Animal
{
protected $race;
public function __construct($race)
{
$this->race = $race;
}
public function giveHug()
{
return 'Kiss my friend ' . $this->race;
}
}
$dog = new Dog('WauWau');
// Note: we call $dog to give hug. So the ONE dog =)
echo $dog->giveHug() . PHP_EOL;
// Kiss my friend WauWau
編輯:示例
$dog = new Dog('WauWau');
echo Dog::giveHug($dog) . PHP_EOL;
更像是“嘿,外面的所有狗......給這個(動物$狗)一個擁抱”。
在某些情況下,這是有道理的。 但在這種情況下 - 不是 =)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.