Говорят, что создание сайта - очень длительный и трудоемкий процесс. Мы скажем - НЕТ! Ведь с новыми технологиями, такими как HTML5, CSS3, PHP и MySql можно быстро и легко научиться создавать сайты любой сложности.
Два сумасшедших веб-мастера покажут где что лежит и как этим пользоваться.
Авторизация
Новый
Забыл
Пожалуйста, заполните поля выше. Это нужно сделать обязательно, иначе ничего не получится.
PHP Статейки /

ООП в PHP 5 для начинающих. Часть 2-ая. Магические методы в ООП

  • Суббота, 30 октября 2011, 17:41 |
  • Автор: fiamma |
  • Просмотров: 4021 |
  • Комментарии: 2 |
  • В закладки:
ООП на PHP - Часть 1-ая | Часть 3-я | Часть 4-ая

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

Использование конструкторов и деструкторов

К таким методам относятся методы __construct (), позволяющий задать какие-либо действия при создании объекта, и __destruct (), позволяющий задать действия при удалении объекта (например: разорвать соединение с базой данных).
Для наглядности, возьмем пример:
<?php  
  
class MyClass  
{  
     public $prop1 = "I'm a class property!";  

     public function __construct()  
     {  
         echo 'The class "', __CLASS__, '" was initiated!<br />';
     }
  
     public function __destruct()
     {
         echo 'The class "', __CLASS__, '" was destroyed.<br />';  
     }  
  
     public function setProperty($newval)  
     {  
         $this->prop1 = $newval;  
     }  
  
     public function getProperty()  
     {  
         return $this->prop1 . "<br />";  
     }  
}  

// Создание нового объекта
$obj = new MyClass;  
  
// Получаем значение $prop1  
echo $obj->getProperty();  
  
// Выводим сообщение об окончании файла
echo "End of file.<br />";  
  
?>  

После выполнения данного кода мы увидим сл. результат:
The class "MyClass" was initiated!  
I'm a class property!  
End of file.  
The class "MyClass" was destroyed.  

Хотелось бы обратить ваше внимание, что после завершения выполнения скрипта, PHP автоматические освобождает память.
Примечание:
Константа __CLASS__ используется для получения имени класса, в котором она вызывается. Более подробно о магических константах можно посмотреть здесь


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

Небольшой пример:
<?php

class MyClass
{
    public $prop1 = "I'm a class property!";

    public function __construct()
    {
        echo 'The class "', __CLASS__, '" was initiated!<br />';
    }

    public function __destruct()
    {
        echo 'The class "', __CLASS__, '" was destroyed.<br />';
    }

    public function setProperty($newval)
    {
        $this->prop1 = $newval;
    }

    public function getProperty()
    {
        return $this->prop1 . "<br />";
    }
}

// Создание объекта
$obj = new MyClass;

// Получение значения $prop1
echo $obj->getProperty();

[b]// Уничтожаем объект[/b]
unset($obj);

// Вывод сообщения об окончании файла
echo "End of file.<br />";

?>


Результат выполнения скрипта будет следующим:
The class "MyClass" was initiated!
I'm a class property!
The class "MyClass" was destroyed.
End of file.


Преобразование в String

На этом магические методы не оканчиваются.
При попытке вывести объект как строку мы получим ошибку. Для того, чтобы избежать этого неприятного случая необходимо воспользоваться методом __toString().

Попытаемся обратиться к объекту как к строке. Пример:
<?php

class MyClass
{
    public $prop1 = "I'm a class property!";

    public function __construct()
    {
        echo 'The class "', __CLASS__, '" was initiated!<br />';
    }

    public function __destruct()
    {
        echo 'The class "', __CLASS__, '" was destroyed.<br />';
    }

    public function setProperty($newval)
    {
        $this->prop1 = $newval;
    }

    public function getProperty()
    {
        return $this->prop1 . "<br />";
    }
}

// Создаем новый объект
$obj = new MyClass;

// Выводим объект как строку
echo $obj;

// Явно уничтожаем объект
unset($obj);

// Выводим сообщение об окончании файла
echo "End of file.<br />";

?>


В результате мы увидим:
The class "MyClass" was initiated!

Catchable fatal error: Object of class MyClass could not be converted to string in /Applications/XAMPP/xamppfiles/htdocs/testing/test.php on line 40


Чтобы избежать вывод данной ошибки, воспользуемся методам __toString() :
<?php

class MyClass
{
    public $prop1 = "I'm a class property!";

    public function __construct()
    {
        echo 'The class "', __CLASS__, '" was initiated!<br />';
    }

    public function __destruct()
    {
        echo 'The class "', __CLASS__, '" was destroyed.<br />';
    }

    public function __toString()
    {
        echo "Using the toString method: ";
        return $this->getProperty();
    }

    public function setProperty($newval)
    {
        $this->prop1 = $newval;
    }

    public function getProperty()
    {
        return $this->prop1 . "<br />";
    }

}

// Создаем новый объект
$obj = new MyClass;

// Выводим объект как строку
echo $obj;

// Явно уничтожаем объект
unset($obj);

// Выводим сообщение об окончании файла
echo "End of file.<br />";

?>


В результате мы получим:
The class "MyClass" was initiated!
Using the toString method: I'm a class property!
The class "MyClass" was destroyed.
End of file.


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