【发布时间】:2013-07-13 20:16:56
【问题描述】:
是否可以检查一个方法是否被 PHP 中的子类覆盖?
<!-- language: lang-php -->
class foo {
protected $url;
protected $name;
protected $id;
var $baz;
function __construct($name, $id, $url) {
$this->name = $name;
$this->id = $id;
$this->url = $url;
}
function createTable($data) {
// do default actions
}
}
儿童班:
class bar extends foo {
public $goo;
public function createTable($data) {
// different code here
}
}
当遍历定义为此类成员的对象数组时,如何检查哪些对象具有新方法而不是旧方法?有method_overridden(mixed $object, string $method name)这样的函数吗?
foreach ($objects as $ob) {
if (method_overridden($ob, "createTable")) {
// stuff that should only happen if this method is overridden
}
$ob->createTable($dataset);
}
我知道template method pattern,但是假设我希望程序的控制与类和方法本身分开。我需要一个像method_overridden 这样的函数来完成这个。
【问题讨论】:
-
重载,还是被覆盖?我以为 PHP 没有方法重载
-
我的意思是被覆盖了,是的
-
如果您的设计依赖于了解类如何覆盖特定方法,那么您的设计就存在严重问题。 OO 背后的整个想法是,您可以向对象发送消息,并由对象以适当的方式处理它。调用代码不应该关心正在调用什么实现或如何处理它的消息。
标签: php oop overloading