基本的なクラスを見てみましょう:
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()
メソッドを削除する必要があることはわかっていますが、誤って呼び出してはならないという通知として保持したかったのです。これを利用できないようにするために「プライベート」にしたかったのですが、私たちが知っているように、それは不可能です:)
何か案は?