Несколько конструкторов в PHP
PHP не допускает использование нескольких конструкторов с разными сигнатурами аргументов в классе. Это создает проблему, когда разные сценарии требуют разных процессов инициализации.
Один из подходов — определить два метода конструктора:
class Student { public function __construct($id) { $this->id = $id; } public function __construct(array $row_from_database) { $this->id = $row_from_database['id']; $this->name = $row_from_database['name']; } }
Однако этот подход нарушает правила синтаксиса конструктора PHP.
Чтобы обойти это ограничение, обычным решением является создание вместо этого статических фабричных методов:
class Student { public function __construct() { // Allocate resources here } public static function withID($id) { $student = new self(); $student->id = $id; return $student; } public static function withRow(array $row) { $student = new self(); $student->id = $row['id']; $student->name = $row['name']; return $student; } }
При использовании этого метода инициализация выполняется с помощью статических методов вместо конструктора:
$studentWithID = Student::withID(42); $studentWithRow = Student::withRow(['id' => 42, 'name' => 'John']);
Статические фабричные методы предоставляют гибкий и удобный в сопровождении способ решения нескольких сценариев инициализации, придерживаясь при этом Принципы проектирования классов PHP.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3