这是一个非常基本的架构问题,因此非常具有假设性。
想象一下这个简单的设置:
我有一个表示Web对象的类,只有一个方法可以呈现该对象。但是,此类扩展了一个父类,它需要满足某些条件,以便实际执行该方法(以便呈现对象)。
示例
class webObject__adminBase {
protected function shouldRender(){
return access::isAdmin();
}
}
class webObject__adminPanel extends webObject__adminBase {
public function invoke(){
if(!parent::shouldRender())
return;
// if still here, render the object
}
}
$panel = new webObject__adminPanel();
$panel->invoke();
上面的代码同时适用于:一个例子加上解决问题的实用解释方法。
问题是:我想解决这个问题,而不必在子代的渲染方法中调用父类中的方法。
我想实现一个类设计,确保我需要做的就是扩展父类webObject__adminBase
。应该根据某些条件检查对子类中任何方法的任何调用(如本示例中的systemAccess::isAdmin()
),并且仅在满足这些条件时才进行渲染。
我希望我的描述清楚。
由于某人实际上要求将此问题视为“过于宽泛”,我决定通过更直接地引用问题标题来重新解释我的实际问题:
有没有办法根据子类检查的条件(不调用该父类的方法)拦截子方法的进展(甚至执行)?
答案 0 :(得分:1)
这是一种做法,尽管很简单。我确信有更好的方法,但是这个方法试图保持原来的方法。
渲染类
abstract class Render
{
abstract public function main();
public function __construct()
{
}
final public function render()
{
if (!$this->canRender()) return '';
return $this->main();
}
final public function canRender()
{
// Logic here
return true;
}
}
管理员面板类
class AdminPanel extends Render
{
public function main()
{
return "Admin Panel";
}
}
执行
$panel = new AdminPanel();
echo $panel->render();
PeeHaa对命名约定是正确的,尝试遵循流行的编码风格是最有利的,这使您自己更容易阅读代码,反之亦然。您可能需要查看有助于创建一致代码的PHP-FIG PSR one和two标准。
PHP The Right Way也是一个很好的网站,可以帮助你最多,它提供有关依赖注入和编码实践的信息等。