Оглавление

Конструкторы и деструкторы

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


Чтобы продемонстрировать концепцию конструкторов, добавим в класс MyClass конструктор, выводящий сообщение всякий раз, когда создается новый экземпляр.

 

<?php 
 
class MyClass 
{ 
    public $prop1 = "Это свойство класса!"; 
 
    public function __construct()                            
    {                                                        
        echo 'Класс  "', __CLASS__ ,'" инициирован!<br />';  
    }                                                        
 
    public function setProperty($newval) 
    { 
        $this->prop1 = $newval; 
    } 
 
    public function getProperty() 
    { 
        return $this->prop1 . "<br />"; 
    } 
} 
 
// Создать новый объект               
$obj = new MyClass;                   
                                      
// Получить значение свойства $prop1  
echo $obj->getProperty();             
                                      
// Вывести сообщение в конце файла    
echo "Конец файла.<br />";            
 
?> 

 

Примечание. Здесь __class__ является так называемой магической константой, в данном случае возвращающей имя класса, в котором она вызывается. Существует ряд магических констант, о которых можно подробнее прочитать в руководстве по РНР, находящемся по следующему адресу:
http://us3.php.net/manual/en/language.constants.predefined.php

  
После перезагрузки этого файла в браузере отобразится следующий результат.

 

Класс "MyClass" инициирован!
Это свойство класса!
Конец файла.


Для вызова функций во время уничтожения объектов предусмотрен магический метод  __destruct(), получивший название деструктора. Этот метод целесообразно использовать для освобождения ресурсов, принадлежащих классу (например, для закрытия соединения с базой данных).

 
Организуем вывод сообщения при уничтожении объекта, определив в классе MyClass магический метод __destruct().

  
<?php 
 
class MyClass 
{ 
    public $prop1 = "Это свойство класса!"; 
 
    public function __construct() 
    { 
        echo 'Класс "', __CLASS__, '" инициирован!<br />'; 
    } 
 
    public function __destruct()                          
    {                                                     
        echo 'Класс "', __CLASS__, '" уничтожен.<br />';  
    }                                                     
 
    public function setProperty($newval) 
    { 
        $this->prop1 = $newval; 
    } 
 
    public function getProperty() 
    { 
        return $this->prop1 . "<br />"; 
    } 
} 
 
// Создать новый объект
$obj = new MyClass; 
 
// Получить  значение свойства $prop1 
echo $obj->getProperty(); 
 
// Вывести сообщение в конце файла 
echo "Конец файла.<br />"; 
 
?> 

 

Перезагрузка файла, в котором определен деструктор, приведет к следующему результату.


Класс "MyClass" инициирован!
Это свойство класса!
Конец файла.
Класс "MyClass" уничтожен.

 

Когда достигается конец файла, РНР автоматически освобождает все ресурсы, использовавшиеся в сценарии, чтобы не занимать лишний объем памяти. При этом автоматически запускается деструктор объекта MyClass.
Деструктор можно запустить явно, уничтожив объект с помощью функции unset().


<?php 
 
class MyClass 
{ 
    public $prop1 = "Это свойство класса!"; 
 
    public function __construct() 
    { 
        echo 'Класс "', __CLASS__, '" инициирован!<br />'; 
    } 
 
    public function __destruct() 
    { 
        echo 'Класс "', __CLASS__, '" уничтожен.<br />'; 
    } 
 
    public function setProperty($newval) 
    { 
        $this->prop1 = $newval; 
    } 
 
    public function getProperty() 
    { 
        return $this->prop1 . "<br />"; 
    } 
	} 
 
// Создать новый объект 
$obj = new MyClass; 
 
// Получить  значение свойства $prop1 
echo $obj->getProperty(); 
 
// Уничтожить объект                    
unset($obj);                            
 
// Вывести сообщение в конце файла 
echo "Конец файла.<br />"; 
 
?> 

Теперь результат, который отобразится после перезагрузки браузера, будет следующим.

 

Класс "MyClass" инициирован!
Это свойство класса!
Класс "MyClass" уничтожен.
Конец файла.
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити