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

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

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

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 пытается вызвать конструктор с тем же именем, что и имя класса.
Теги:
username, password, класса, конструкторов, создания, class, метод, время, объекта, Однако, конструктор, function, именем, конструктора, именах, изменяется, construct, функции, после, Увидев, нибудь, знайте, всего, целях, облегчает, вызов, поскольку, необходимости, Engine, знать, родительского, также, требует, совместимости, найден
Добавлено: 21 Июля 2018 13:37:52 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...