我有以下设置:
<?php
class core {
static $var1;
}
class parent extends core {
function getStatic() {
return parent::$var1;
}
}
class child extends parent {
function getStatic() {
// I want to access core static var, how can i do it?
//return parent::$var1;
}
}
?>
我需要能够使用parent :: $ var1但是来自class child ..这可能吗?我错过了什么吗?
答案 0 :(得分:4)
只需将其引用为self ... PHP将自动进入继承链,直到找到匹配项
class core {
protected static $var1 = 'foo';
}
class foo extends core {
public static function getStatic() {
return self::$var1;
}
}
class bar extends foo {
public static function getStatic() {
return self::$var1;
}
}
现在,如果您未在bar中声明getStatic,则会出现问题。我们来举个例子:
class foo1 extends core {
protected static $var1 = 'bar';
public static function getStatic() {
return self::$var1;
}
}
class bar1 extends foo1 {
protected static $var1 = 'baz';
}
现在,您希望foo1::getStatic()
返回bar
(它会)。但Bar1::getStatic()
将返回什么?它也将返回bar
。这称为后期静态绑定。如果您希望它返回baz
,则需要使用static::$var1
而不是self::$var1
(仅限PHP 5.3+)...
答案 1 :(得分:2)
core :: $ var1似乎最适合您的需求......
答案 2 :(得分:1)
这里最大的问题是您使用关键字parent作为类名。这使得对parent :: $ var1的调用是否旨在指向该类或调用类的父类是完全不明确的。
我相信,如果你清理它,你可以实现你想要的。例如,此代码打印'某事'。
class core {
static $var1 = 'something';
}
class foo extends core {
function getStatic() {
return parent::$var1;
}
}
class bar extends foo {
function getStatic() {
// I want to access core static var, how can i do it?
return parent::$var1;
}
}
$b = new bar ();
echo $b->getStatic ();
如果您使用core::
代替parent::
,它也会有效。但是,如果在foo
类中声明静态$ var1,那么这两个 的行为会有所不同。因为它是一个单一的,继承的变量。