我无法从扩展类中调用静态函数(带常量)。这是我的代码:
(1st file)
class A
{
function isXSet()
{
return X;
}
public static function setX()
{
define('X', 1);
}
}
(second file)
include('/*first file*/');
class B extends A
{
A::setX();
}
我怎样才能做到这一点?
答案 0 :(得分:1)
您的代码
class B extends A
{
A::setX();
}
稍微偏了一点。你没有把你的电话放在方法里面。
class B extends A
{
public static function doSomething() {
A::setX();
}
}
这实际上并不是通过父/子关系做任何事情。实际上,在您定义class A
之后,对A::setX()
的调用可以在任何地方发生,因为它是公共的和静态的。这段代码同样有效:
class A
{
function isXSet()
{
return X;
}
public static function setX()
{
define('X', 1);
}
}
class B { // No extending!
function isXSet() {
return A::isXSet();
}
}
您更有可能寻找的是parent
:
class A
{
public function isXSet()
{
return X;
}
protected static function setX()
{
define('X', 1);
}
}
class B extends A
{
public static function doSomething() {
parent::setX();
var_dump( parent::isXSet() ); // int(1)
}
}
这里的一大优点是扩展类可以从parent
类访问 protected 方法和属性。这意味着除非被叫方是A::setX()
的实例或子节点,否则您可以阻止其他所有人调用A
。