Приднестровская поддержка XOOPS
Во многих случаях некоторые свойства объектов желательно устанавливать уже в процессе создания объекта. Для этих целей РНР предоставляет магический метод __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 />";
?>
После перезагрузки этого файла в браузере отобразится следующий результат.
Для вызова функций во время уничтожения объектов предусмотрен магический метод __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.
Деструктор можно запустить явно, уничтожив объект с помощью функции 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 />"; ?>
Теперь результат, который отобразится после перезагрузки браузера, будет следующим.
Отправитель | Нити |
---|
29 пользователь(ей) активно (15 пользователь(ей) просматривают Инструкции)
Участников: 0 Гостей: 29 далее... |