Определение конструкторов объектов

Задача
Необходимо определить метод, вызываемый во время создания нового экземпляра класса. Например, требуется автоматически загружать информацию из базы данных во время создания объекта.

Решение
Определите метод с тем же самым именем, что и имя класса:

class user {
function user($username, $password) {
...
}
}

Обсуждение
Если функция имеет то же имя, что и класс, она действует как конструктор:

class user {
var $username;
function user($username, $password) {
if ($this->validate_user($username, $password)) {
$this->username = $username;
}
}
}
$user = new user('Grif', 'Mistoffelees'); // используем встроенный конструтор

PHP не всегда поддерживал конструкторы. Поэтому программисты создавали псевдоконструкторы, следуя соглашению об именах и вызывая эти функции после создания объекта:

class user {
...
init($username, $password) { ... }
}
$user = new user();
$user->init($username, $password);

Увидев что-нибудь подобное, знайте, что это, скорее всего, унаследованный код.

Однако стандартное наименование всех конструкторов облегчает вызов родительских конструкторов (поскольку нет необходимости знать имя родительского класса), а также не требует модификации конструктора, если изменяется имя класса.


В Zend Engine 2 соглашения об именах конструкторов были изменены, и новое имя конструктора теперь __construct(). Однако в целях обратной совместимости, если такой метод не найден, PHP пытается вызвать конструктор с тем же именем, что и имя класса.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Динамическая реализация объекта
Динамическое создание класса
Добавление свойств в базовый объект
Доступ к переопределенным методам
Клонирование объектов

Вернуться в раздел: PHP / 7. Классы и объекты