Разработчику. Сборник рецептов PHP
Задавайте вопросы

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

Вернуться назад

Задача

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

Решение

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

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 пытается вызвать конструктор с тем же именем, что и имя класса.

См. также

Документацию по конструкторам объектов на http://www.php.net/oop.constructor.

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования

Рейтинг Сайтов ДОСКИ.РУ