在 PHP 中的扩展 class 中使用静态函数

Using static function in extended class in PHP

我有一个抽象 class,它有一个使用静态函数的方法。这个静态函数在 sub-classes 中定义,并且对于每个 sub-class 都是不同的。哪个sub-class 将被用于创建对象是在脚本中确定的。请参阅下面的超级简化代码:

abstract class fooClass implements iFooClass {    
    function getBar(){
        $bar = self::getSomething();
        return $bar;
    }        
}

interface iFooClass{
    static function getSomething();
}

class fooSubClass_A extends fooClass {
    static function getSomething() {
        //do something;
        //return something;
    }
}

class fooSubClass_B extends fooClass {
    static function getSomething() {
        //do something else;
        //return something else;
    }
}

$foo = New fooSubClass_A;
$bar = $foo->getBar();

这段代码给我这个错误:

Fatal error: Cannot call abstract method iFooClass::getSomething() in C:\wamp\www\Classes\fooClass.php on line 12

我想既然 sub-classes 可以访问 super-classes 方法 getBar 它会从 sub-class 调用因此有访问其静态函数。显然不是。有没有办法重做它以使其工作?

我认为首先你应该在 "fooClass" 中实现 "iFooClass" 接口中的 "getSomething" 方法,因为所有接口功能都必须在子 class 中实现,这是基本规则接口。只有在那之后,您才能将此函数包含到另一个 class 方法中。

编辑:抽象classes有能力不实现所有接口方法,如果它们在它的子classes中实现。

Edit2 当您使用 Self 关键字调用方法时,它会从 class 实际存在的 class 调用方法,而不是从 class 对象调用方法我们从中调用方法。这就是为什么 self::method() 应该更改为 static::method()