【发布时间】:2021-12-30 13:56:30
【问题描述】:
我有一个实现接口的类。
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;
}
}
我明白了
不能在非对象上下文中使用 $this。
我明白这一点,那么如何在我重新定义的 giveHug 方法中获得 Dog 属性? 有人有什么技巧可以帮忙吗? 谢谢
【问题讨论】:
-
静态方法只能调用静态方法/属性。因此;去除静电。
-
我有几个类使用这个接口。你有什么技巧可以得到这个属性吗?
-
如果您要创建一些 Dogs,静态函数将如何理解您要使用哪个种族?
-
这是
static环境在 OOP 中工作时的限制。您应该从您的方法中删除静态,但如果您必须以这种方式使用它,那么就这样做(它只会显示最后一个Dog实例的“吻我的朋友”):public function __construct($race) { $this->race = $race; self::$instance = $this; }public static function giveHug() { return 'Kiss my friend ' . self::$instance->race; }跨度> -
class Dog()-- 这看起来不像是有效的 PHP。如果您先提取minimal reproducible example,这将有所帮助,同时确保您知道问题的真正含义。正如其他人所提到的,删除static或描述您认为需要它的原因。另外,我建议您不要使用protected成员,而是使用private,除非您有充分的(!)理由。
标签: php oop interface implements