Генератор форм

Для веб-мастера

Реклама

Объектно-ориентированное программирование в PHP. Конструкторы и деструкторы

Рейтинг:
Дата: 26 августа 2011 Просмотры 15688

В прошлой статье посвященной объектно-ориентированному программированию в PHP мы рассмотрели основы ООП в PHP, а именно изучили понятия классов, объектов, свойств и методов, - и мы научились создавать простые классы и объекты в PHP.

В сегодняшней статье мы поговорим об конструкторах и деструкторах в ООП.

Конструкторы

Очень часто при создании экземпляра объекта на основе класса требуется выполнить какие-то базовые настройки, будь то установка свойств объекта или же открытие файлов конфигурации, да мало ли что еще. Именно для этих целей в ООП и существует метод конструктор. В версиях до PHP 5 имя метода конструктора совпадало с именем класса к которому он относится, а начиная с версии PHP 5 имя метода конструктора необходимо называть  __construct() (это 2 подчеркивания перед словом construct()). 

Конструктор автоматически вызывается при создании объекта. Давайте попробуем создать класс, который будет содержать метод __construct():

class MyClass {

  public function __construct() {
    echo "Я только что был создан!";
  }
}

$myObject = new MyClass();  // выведет «Я только что был создан!»

MyClass содержит простой конструктор, который выводит сообщения с помощью оператора echo. В последней сточке кода мы создаем экземпляр класса MyClass() и когда это происходит PHP автоматически вызывает конструктор и на экран выводится сообщение «Я только что был создан!»

Давайте теперь посмотрим еще на один пример, в котором при создании объекта происходит инициализации его свойств:

Class Product{

  private $title;
  private $price;
  private $discount;

  public function __construct( $title, $price, $discount ) {
    $this->title = $title;
    $this->price = $price;
    $this->discount = $discount;
  }


   public function getProduct(){
     echo  'Наименование товара: "'.$this->title.'"<br />';
      echo  'Цена товара: '.$this->price .' $<br />';
      echo  'Скидка: '.$this->discount .'%<br />';
   }

}

$product = new Product('Мастер создания форм',20,25);
$product->getProduct();

Если запустить этот скрипт, то на экран будет выведена следующая информация:

Наименование товара: "Мастер создания форм"
Цена товара: 20$
Скидка: 25%

Класс Product содержит 3 приватных (private) свойства: $title$price и $discount, и конструктор, который принимает 3 аргумента: название товара, цена товара и скидка. Также имеется метод getProduct(), который выводит на экран информацию о товаре. В методе конструктора используется псевдопеременная $this для присвоения значений соответствующим свойствам объекта.

Далее мы создаем новый объект Product и передаем в нем информацию  о товаре. Конструктор принимает эти данные и устанавливает соответствующие свойства объекта. И наконец вызывается метод getProduct(), который выводит на экран сохраненные значения свойств объекта.

Деструкторы

Подобно конструкторам в PHP существуют деструкторы, которые вызываются строго перед тем, как объект удаляется из памяти.

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

Примечание: PHP автоматически удаляет объект из памяти, когда не остается ни одной переменной, указывающей на него. Например, если вы создадите новый объект и сохраните его в переменной $myObject, а затем удалите ее с помощью метода unset($myObject), то сам объект также удалится. Также, если вы создали локальную переменную в какой-либо функции, она (вместе с объектом) удалится, когда функция завершит работу.

В отличии от конструкторов, в деструкторы нельзя передавать никакие параметры!

Чтобы создать деструктор, добавьте в класс метод __destruct().  Вот простой пример:

class MyClass {
 public function __destruct() {
   echo "Я деструктор. Объект был удален. Пока!";
 }
}

$myObject = new MyClass(); 
unset( $myObject );    // отобразит "Я деструктор. Объект был удален. Пока!"

Мы создали простенький деструктор, который отображает на странице сообщение. Затем мы создали объект нашего класса и сразу же удалили его, вызвав метод unset() для переменной, которая ссылается на объект. Перед самым удалением объекта вызвался деструктор, который отобразил в браузере сообщение "Я деструктор. Объект был удален. Пока!".

Также следует заметить, что деструктор вызывается и при выходе из скрипта, так как все объекты и переменные при выходе из метода удаляются. Давайте посмотрим на пример:

class MyClass {
 public function __destruct() {
   echo "Я деструктор. Объект был удален. Пока!";

 }
}

$myObject = new MyClass(); 
exit; // отобразит "Я деструктор. Объект был удален. Пока!"

Если работа скрипта прекратится из-за возникшей ошибки, деструктор тоже вызовется.

Примечание: при создании объектов класса-наследника, конструкторы класса-родителя не вызываются автоматически. Вызывается только конструктор самого наследника. Тем не менее вы можете вызвать конструктор родителя из класса-наследника таким образом: parent::__construct(). То же самое касается деструкторов. Вызвать деструктор родителя можно так: parent:__destruct().

О на следовании мы поговорим в следующих статьях. А на сегодня все!

Оцените эту статью:



Похожие статьи
Интересно почитать

    Получать новые материалы этого сайта на свой email адрес?

    Отправлять мне комментарии по эл. почте?

Простая CRM

Нашли ошибку в тексте

Система Orphus
https://biznesguide.ru/coding/142.html
4,67 из 5 на основе 6 оценок.