php - 从扩展类调用静态函数

时间:2016-07-12 18:02:13

标签: php static

我无法从扩展类中调用静态函数(带常量)。这是我的代码:

(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();        
}

我怎样才能做到这一点?

1 个答案:

答案 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