这两个 OOP 场景之间的区别?
Difference between these two OOP scenarios?
我对这两种情况之间的差异或性能提升感到困惑。为什么会选择一个而不是另一个?
Parent class:
class exampleB
{
public function __construct($arg1, $arg2)
{
// Do something with the arguments.
}
}
Childclass一个
class exampleA extends exampleB
{
public function make($arg1, $arg2)
{
parent::__construct($arg1, $arg2);
}
}
Running the first example:
$exampleA = new exampleA();
$exampleA->make('arg1', 'arg2');
第二个例子是:
Child class一个
class exampleA extends exampleB
{
public static function make($arg1, $arg2)
{
return new static($arg1, $arg2);
}
}
Running the second example:
exampleA::make('arg1', 'arg2');
有人可以告诉我这两种情况的优点 and/or 缺点吗?我有这些示例的原因是因为我不想覆盖 parent class.
的构造函数
我会选择第二个例子。 Make() 就像一个构造函数,因此应该像一个构造函数一样调用,即静态的。
在第一个示例中,您创建了两个对象而不是一个。当其他开发人员阅读/维护您的代码时,这可能会造成一些混乱。
您应该两者都不做,而应该使用构造函数来初始化对象。对象必须在构造后处于有效状态。
The reason I have these example because I do not want to override the constructor of my parent class.
那么就不要在子对象中定义构造函数 class。
class Parent {
public function __construct() {
echo 'parent ctor called';
}
}
class Child extends Parent {}
new Child(); // echo's parent ctor called
我对这两种情况之间的差异或性能提升感到困惑。为什么会选择一个而不是另一个?
Parent class:
class exampleB
{
public function __construct($arg1, $arg2)
{
// Do something with the arguments.
}
}
Childclass一个
class exampleA extends exampleB
{
public function make($arg1, $arg2)
{
parent::__construct($arg1, $arg2);
}
}
Running the first example:
$exampleA = new exampleA();
$exampleA->make('arg1', 'arg2');
第二个例子是:
Child class一个
class exampleA extends exampleB
{
public static function make($arg1, $arg2)
{
return new static($arg1, $arg2);
}
}
Running the second example:
exampleA::make('arg1', 'arg2');
有人可以告诉我这两种情况的优点 and/or 缺点吗?我有这些示例的原因是因为我不想覆盖 parent class.
的构造函数我会选择第二个例子。 Make() 就像一个构造函数,因此应该像一个构造函数一样调用,即静态的。
在第一个示例中,您创建了两个对象而不是一个。当其他开发人员阅读/维护您的代码时,这可能会造成一些混乱。
您应该两者都不做,而应该使用构造函数来初始化对象。对象必须在构造后处于有效状态。
The reason I have these example because I do not want to override the constructor of my parent class.
那么就不要在子对象中定义构造函数 class。
class Parent {
public function __construct() {
echo 'parent ctor called';
}
}
class Child extends Parent {}
new Child(); // echo's parent ctor called