Разница между этими двумя сценариями ООП?

Я не понимаю, какая разница или выигрыш в производительности будут между этими двумя сценариями. Почему один будет выбран над другим?

Родительский класс:

class exampleB
{
public function __construct($arg1, $arg2)
{
// Do something with the arguments.
}
}

Детский класс А

class exampleA extends exampleB
{
public function make($arg1, $arg2)
{
parent::__construct($arg1, $arg2);
}
}

Запуск первого примера:

$exampleA = new exampleA();
$exampleA->make('arg1', 'arg2');

Второй пример будет:

Детский класс А

class exampleA extends exampleB
{
public static function make($arg1, $arg2)
{
return new static($arg1, $arg2);
}
}

Выполнение второго примера:

exampleA::make('arg1', 'arg2');

Может ли кто-нибудь сказать мне преимущества и / или недостатки между этими двумя сценариями? Причина, по которой у меня есть этот пример, потому что я не хочу переопределять конструктор моего родительского класса.

0

Решение

Вы не должны делать ничего и использовать конструктор для инициализации объекта. Предмет должен быть в действительном состоянии после строительства.

Причина, по которой у меня есть этот пример, потому что я не хочу переопределять конструктор моего родительского класса.

Тогда просто не определяйте конструктор в дочернем классе.

class Parent {
public function __construct() {
echo 'parent ctor called';
}
}

class Child extends Parent {}

new Child(); // echo's parent ctor called
2

Другие решения

Я бы выбрал второй пример. Make () действует как конструктор и поэтому должен вызываться как один, то есть static.

В первом примере вы создаете два объекта вместо одного. Это может создать некоторую путаницу, когда другие разработчики читают / поддерживают ваш код.

-1

По вопросам рекламы [email protected]