我很困惑这两种情况之间的差异或性能提升。为什么要选择一个呢?
家长班:
class exampleB
{
public function __construct($arg1, $arg2)
{
// Do something with the arguments.
}
}
儿童A类
class exampleA extends exampleB
{
public function make($arg1, $arg2)
{
parent::__construct($arg1, $arg2);
}
}
运行第一个例子:
$exampleA = new exampleA();
$exampleA->make('arg1', 'arg2');
第二个例子是:
儿童A类
class exampleA extends exampleB
{
public static function make($arg1, $arg2)
{
return new static($arg1, $arg2);
}
}
运行第二个例子:
exampleA::make('arg1', 'arg2');
有人可以告诉我这两种情况之间的优点和/或缺点吗?我有这些例子的原因是因为我不想覆盖我父类的构造函数。
答案 0 :(得分:2)
您既不应该使用构造函数来初始化对象。构造后,对象必须处于有效状态。
我有这些例子的原因是因为我不想覆盖我父类的构造函数。
然后只是不要在子类中定义构造函数。
class Parent {
public function __construct() {
echo 'parent ctor called';
}
}
class Child extends Parent {}
new Child(); // echo's parent ctor called
答案 1 :(得分:-1)
我会选择第二个例子。 Make()的作用类似于构造函数,因此应该像一个一样调用,即静态。
在第一个示例中,您创建了两个对象而不是一个。当其他开发人员读取/保留您的代码时,这可能会产生一些混淆。