Основы ООП. Продолжение

Продолжим рассмотрение ООП в пхп версии 5. Узнаем еще про парочку возможностей, связанных с классами и подведем итоги двух статей про ООП.

Метод доступа к свойствам объекта

Я тут вспомнил C#. Это тоже объектно-ориентированный язык. В нем возможно было определить специальные обработчики для доступа к свойствам класса: set и get. Метод set позволял переопределить функцию установки свойства объекта, а get - переопределить функцию взятия значения свойства объекта. Так вот в PHP5 оказывается тоже есть такие вещи:

<?
    class MyClass {
        private $properties;

        function __set($name, $value) {
            echo "задание нового свойства $name = $value";
            $this->properties[$name]=$value;
        }

        function __get($name) {
            echo "чтение значения свойства ".$name;
            return $this->properties[$name];
        }
    }

    $obj = new MyClass;
    $obj->property = 1;  // Выводит "задание нового свойства property = 1"
    $a = $obj->property; // Выводит "чтение значения свойства property"
    echo $a; // выводит 1;
?>

То есть в этом случае мы задали массив $properties (доступный только внутри текущего объекта), который содержит все свойства класса, а обращаемся к этим свойствам через __set и __get. Эти методы дают нам возможность выполнить не только присвоение/взятие значения свойства объекта, но и выполнить какие-то другие действия. В рассмотренном выше случае эти действия - вывод строк с помощью echo.

Метод __toString()

Если мы сделаем так:

<?
    class MyClass {
    }

    $obj = new MyClass;
    echo $obj;
?>

PHP5 поругается и скажет, что не может преобразовать объект в строку. Чтобы мы смогли преобразовать этот объект в строку, применяется специальный метод __toString():

<?
    class MyClass {
        function __toString() {
            return "MyClass";
        }
    }
    $obj = new MyClass;
    echo $obj; // Выводит "MyClass"
?>

Мы могли бы не пользоваться этим специальным методом, написав, например, простой метод, который делал бы то же самое:

<?
    class MyClass {
        function myToString() {
            return "MyClass";
        }
    }
    $obj = new MyClass;
    echo $obj->myToString(); // Выводит "MyClass"
?>

Но разработчики PHP5 решили вынести это в отдельный метод. Видимо неявное преобразование объекта в строку меньше загружает программера посторонними мыслями :)

Резюме

Итак, в последних двух статьях про ООП мы рассмотрели особенности объектно-основанного программирования на PHP5. Подчеркиваю - объектно-основанного, а не ориентированного, потому что объектно-ориентированное подразумевает использование абстрактных классов, интерфейсов, механизмов наследования и полиморфизма. А о них мы поговорим в другой статье. Нам же сначала надо переварить вышенаписанное :)





Читайте также:



6 Ответов на “Основы ООП. Продолжение”

  1. lena

    Хорошо било б виложить силку на Апач… Или посоветуйте движок… :-(

  2. novice

    В первых статьях я писал про инструменты. Советую использовать набор денвера [ссылка] - там и apache и mysql, все что тебе понадобится - там есть.

  3. Jenia

    ух ты, доходчиво написано, все понятно, Спасибо автору.

    Переходим к следующей статье из этого цикла.

  4. Кот ДаWINчи

    “Советую использовать набор денвера”
    мда…..
    а я не советую. поставьте себе для опытов что-нибудь типа XAMPP или APPSERVER.

    C денвером я в своё время столько горя хапнул, что теперь обхожу его стороной.

  5. Роман

    private $properties;
    и
    $obj->property = 1; ?

  6. Тут бы не мешало упомянуть про мэджик методы. А то начинающим может будет непонятно каким мокаром происходит вызов __get & __set


© Copyright. . I-Novice. All Rights Reserved. Terms | Site Map