«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как вы можете обрабатывать несколько сценариев инициализации в классах PHP без нескольких конструкторов?

Как вы можете обрабатывать несколько сценариев инициализации в классах PHP без нескольких конструкторов?

Опубликовано 24 ноября 2024 г.
Просматривать:952

How Can You Handle Multiple Initialization Scenarios in PHP Classes Without Multiple Constructors?

Несколько конструкторов в 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