让我们看一个基本类:
class A
{
public function renderSomethingRecursive()
{
//this function can call itself
self::renderSomethingRecursive(); // ERROR!!!!
}
abstract public function addSomething (value);
}
class B extends A
{
public function renderSomethingRecursive()
{
throw new Exception ('This time this method must not be called!');
}
public function addSomething (value)
{
//something, something, something....
parent::renderSomethingRecursive();
}
}
$obj = new B();
$obj->addSomething(....);
当我这样做时,B::renderSomethingRecursive()
仍然会被调用,这是我不想要的......在A:renderSomethingRecursive()
方法上,在self::renderSomethingRecursive(); // ERROR!!!!
线路调用B::renderSomethingRecursive();
而不是 A::renderSomethingRecursive();
,这是合理的,因为$this
现在B
而不是A
......但是我不知道如何躲避它。
顺便说一句,我知道B::renderSomethingRecursive()
方法应该被删除,但我想保留它作为一个通知,它不能被意外调用。我想将其设为“私有”以使其不可用,但正如我们所知,这是不可能的:)
有任何想法吗?