【发布时间】:2011-01-24 15:15:48
【问题描述】:
确保始终构造父类的最佳方法是什么,因为我们可以轻松地覆盖构造函数而无需调用它们。
另外:这是不好的做法吗?
abstract class A
{
// make it final to ensure parent constructor is allways used
final function __construct($param1)
{
// do essencial stuff here with $param1
// pass construction with remaining args to child
call_user_func_array(array($this,'init'),array_slice(func_get_args(),1));
}
abstract function init();
}
class B extends A
{
function init($param2)
{
// effectively extends parent constructor, no?
}
}
$obj = new B("p1","p2");
【问题讨论】:
-
那行得通。你有什么保留?
-
为什么必须调用父构造函数,为什么它如此重要以至于你不能回复那些扩展你的类以正确调用你的构造函数的人?对我来说,这闻起来像是设计缺陷。请解释一下你实际上想要做什么。
-
@Sander:我有一组开发类,它们的构造函数需要太多参数并进行很多必要的初始化。客户端代码必须能够轻松扩展这些类,而无需覆盖它们的构造函数。如果他们(客户)也需要他们的子类在构造上做任何事情,他们只需将代码添加到 init 方法或将其留空。
-
@fabio:请参阅参数对象上的this article,以减少方法/构造函数的参数数量...
-
@fabio:除了ircmaxell的建议,也可以看看dependency injection。这可能有助于减少构造函数中的初始化,甚至有助于使您的类更简单。
标签: php class parent extend construction