请查看以下代码以了解我的问题。
<?php
Interface IDoesSomething
{
public static function returnSomething();
}
abstract class MiddleManClass implements IDoesSomething
{
public static function doSomething()
{
return 1337 * self::returnSomething();
}
}
class SomeClass extends MiddleManClass
{
public static function returnSomething()
{
return 999;
}
}
// and now, the vicious call
$foo = SomeClass::doSomething();
/**
* results in a
* PHP Fatal error: Cannot call abstract method IDoesSomething::returnSomething()
*/
?>
有没有办法强制抽象returnSomething()
,同时保持从抽象“中间人”类中定义的函数调用函数的可能性?看起来像是我的PHP瓶颈。
答案 0 :(得分:9)
如果您的php版本&gt; = 5.3则更改
public static function doSomething()
{
return 1337 * self::returnSomething();
}
到
public static function doSomething()
{
return 1337 * static::returnSomething();
}
答案 1 :(得分:2)
你为什么使用静力学,这不是很好的OOP?静态不适合用于继承,因为它们旨在提供专门用于该类的功能。这可以满足您的需求。
<?php
Interface IDoesSomething{
public function returnSomething();
}
abstract class MiddleManClass implements IDoesSomething{
public function doSomething(){
return 1337 * $this->returnSomething();
}
}
class SomeClass extends MiddleManClass{
public function returnSomething(){
return 999;
}
}
$someClass = new SomeClass();
$foo = $someClass->doSomething();
答案 2 :(得分:2)
此问题称为“后期静态绑定”:php manual