【发布时间】:2012-12-14 08:20:50
【问题描述】:
我有一个名为 ClassA 的绘图 PHP 类,它由许多其他绘图类扩展,例如 ClassB。
我需要继承的类来触发其父类的 Draw() 方法。但是,在我的特殊情况下,我不想直接调用这样的方法(例如:parent::Draw())。我想要第三个函数(例如:parent::InvokeDraw())从父上下文中调用我的绘图方法。
这里有一些代码来说明:
class ClassA
{
function Draw()
{
/* Drawing code ... */
}
function InvokeDraw()
{
$this->Draw();
}
}
class ClassB extends ClassA
{
function Draw()
{
parent::InvokeDraw();
/* Drawing code ... */
}
}
我面临的问题是 InvokeDraw() 不会调用父级的 Draw() 方法,而是扩展类自己的 Draw( ) 方法,从而导致无限循环。
虽然这个问题相当合乎逻辑,但我很难找到解决方法。如何完成这项任务?
想要的效果
无限循环问题
【问题讨论】:
-
为什么要通过
invokeDraw?该方法还有其他有趣的作用吗? -
为了简单起见,这是一个设计选择。在真实案例场景中,
Draw($a, $b, $c, $d, $e)接受 5 个参数,我不希望用户看到上面 2 行中填充了相同的 5 个参数的parent::Draw($a, $b, $c, $d, $e)。它看起来杂乱无章,效率低下。我的尝试是简化代码美学。