Основы PHP
  Что такое PHP?
  Возможности PHP
  Преимущества PHP
  История развития
  Что нового в PHP5?
  «Движок» PHP
  Переход на PHP 5.3
New Переход на PHP 5.6
  Введение в PHP
  Изучение PHP
  Основы CGI
  Синтаксис PHP
  Типы данных PHP
  Переменные в PHP
  Константы PHP
  Выражения PHP
  Операторы PHP
  Конструкции PHP
  Ссылки в PHP
  PHP и ООП
  Безопасность
  Функции PHP
  Функции по категориям
  Функции по алфавиту
  Стандартные функции
  Пользовательские
  PHP и HTTP
  Работа с формами
  PHP и Upload
  PHP и Cookies
  PHP и базы данных
  PHP и MySQL
  Документация MySQL
  Учебники
  Учебники по PHP
  Учебники по MySQL
  Другие учебники
  Уроки PHP
  Введение
  Самые основы
  Управление
  Функции
  Документация
  Математика
  Файлы
  Основы SQL
  Дата и время
  CURL
  Изображения
  Стили
  Безопасность
  Установка
  Проектирование БД
  Регулярные выражения
  Подготовка к работе
  Быстрый старт
  Установка PHP
  Установка MySQL
  Конфигурация PHP
  Download / Скачать
  Скачать Apache
  Скачать PHP
  Скачать PECL
  Скачать PEAR
  Скачать MySQL
  Редакторы PHP
  Полезные утилиты
  Документация
  PHP скрипты
  Скачать скрипты
  Инструменты
  PHP в примерах
  Новости портала
 Главная   »  Изучение PHP  »   PHP и ООП
 
 

PHP5 и ООП (Часть 2)

  1. Явное клонирование объекта

    Создание копии объекта с абсолютно идентичными свойствами не всегда является приемлемым вариантом. Например, когда ваш объект содержит ссылку на какой-либо другой используемый объект и, когда вы создаёте копию ссылающегося объекта, вам нужно также создать новый экземпляр содержащегося объекта, так, чтобы копия объекта содержала собственный отдельный экземпляр содержащегося объекта.

    Копия объекта создается с использованием вызова clone (который вызывает метод __clone() объекта, если это возможно). Вы можете объявить метод __clone(), который будет вызван при клонировании объекта (после того, как все свойства будут скопированы из исходного объекта).

    copy_of_object = clone $object;

    Когда программист запрашивает создание копии объекта, PHP 5 определит, был ли для этого объекта объявлен метод __clone() или нет. Если нет, будет вызван метод __clone(), объявленный по умолчанию, который скопирует все свойства объекта. Если метод __clone() был объявлен, создание копий свойств в копии объекта полностью возлагается на него. Для удобства, движок обеспечивает программиста функцией, которая импортирует все свойства из объекта-источника, так что программист может осуществить позначное копирование свойств и переопределять только необходимые. Приведем пример клонирования объекта:

    <?php
    class MyClass {
         function
    __clone() {
             print
    "Объект был клонирован ";
         }
    }
    $obj = new MyClass();
    clone
    $obj;
    ?>

  2. Константы класса

    В определения классов теперь можно включить константы, и ссылаться на них, используя объект. Константы также могут быть объявлены и в пределах одного класса. Отличие переменных и констант состоит в том, что при объявлении последних или при обращении к ним не используется символ $. Как и свойства и методы, значения констант, объявленных внутри класса, не могут быть получены через переменную, содержащую экземпляр этого класса.

    <?php
    class MyClass {
         const
    SUCCESS = "Success";
         const
    FAILURE = "Failure";
    }
    print
    MyClass::SUCCESS;
    ?>

  3. Статические члены класса

    Определения классов могут теперь включить статических членов класса (свойства и методы), доступ к которым осуществляется через класс. Общее использование статических членов показано на примере:

    <?php
    class Singleton {
         static private
    $instance = NULL;

         private function
    __construct() {
         }

         static public function
    getInstance() {
             if (
    self::$instance == NULL) {
                
    self::$instance = new Singleton();
             }
             return
    self::$instance;
         }
    }
    ?>

  4. Статические методы

    Вы можете теперь определить методы как статические, разрешая им быть вызванными вне контекста объекта. Статические методы не определяются через переменную $this, поскольку они не должны быть ограничены определенным объектом.

    <?php
    class MyClass {
         static function
    helloWorld() {
             print
    "Hello, world";
         }
    }
    MyClass::helloWorld();
    ?>

  5. Абстрактные классы

    PHP 5 поддерживает определение абстрактных классов и методов. Создавать экземпляр класса, который был объявлен абстрактным, нельзя. Класс, в котором объявлен хотя бы один абстрактный метод, должен также быть объявлен абстрактным. Методы, объявленные как абстрактные, несут, по существу, лишь описательный смысл и не могут включать какой-либо функционал. Класс может быть объявлен как абстрактный при помощи использования ключевого слова abstract, для исключения из обработки движком описания класса. Однако, вы можете наследовать абстрактные классы. Практический пример:

    <?php

    abstract class AbstractClass {

       
    /* Данный метод должен быть определён в дочернем классе */
       
    abstract protected function getValue();

       
    /* Общий метод */
       
    public function print() {
          print 
    $this->getValue();
        }

    }

    class 
    ConcreteClass1 extends AbstractClass {

        protected function 
    getValue() {
          return 
    "ConcreteClass1";
        }

    }

    class 
    ConcreteClass2 extends AbstractClass {

        protected function 
    getValue() {
          return 
    "ConcreteClass2";
        }

    }

    $class1 = new ConcreteClass1;
    $class1->print();

    $class2 = new ConcreteClass2;
    $class2->print();
    ?>

  6. Абстрактные методы

    Метод может быть объявлен как abstract, таким образом отложив его определение наследуемым классом. Класс, который включает абстрактные методы, должен быть объявлен как abstract.

    <?php
    abstract class MyBaseClass {
         abstract function
    display();
    }
    ?>

  7. Указание класса как типа

    Определения функции могут включить указание типа класса, передаваемого в качестве параметра. Если функция будет вызвана с неправильным типом, произойдет ошибка.

    <?php
    function expectsMyClass(MyClass $obj) {

    }
    ?>

  8. Поддержка разыменования объектов, которые возвращаются методами.

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

    Поясним на примере. В PHP 4:

    <?php
    $dummy
    = $obj->method();
    $dummy->method2();
    ?>

    В PHP 5:

    <?php
    $obj
    ->method()->method2();
    ?>

  9. Итераторы

    PHP 5 предоставляет механизм итераторов для получения списка всех свойств какого-либо объекта, например, для использования совместно с оператором foreach. По умолчанию, в итерации будут участвовать все свойства, объявленные как public. Пример использования итераторов:

    <?php

    class MyClass {
       public 
    $var1 'value 1';
       public 
    $var2 'value 2';
       public 
    $var3 'value 3';

       protected 
    $protected 'protected';
       private   
    $private   'private';

    }

    $class = new MyClass();

    foreach(
    $class as $key => $value) {
       print 
    "$key => $value\n";
    }

    Результат:

    var1 => value 1
    var2 => value 2
    var3 => value 3

    Как показывает результат, foreach проитерировал все принадлежащие объекту public-свойства.

Продолжение (часть 3) >>>

 
 
 <<< Назад 
 Содержание 
 Вперед >>> 
Есть еще вопросы или что-то непонятно - добро пожаловать на наш  форум портала PHP.SU 
 

 
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS