Основы 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 и ООП (Часть 3)

  1. __autoload()

    Многие разработчики, пишущие объектно-ориентированные приложения, создают один файл, в котором содержится определение класса. Очень неудобно писать в начале каждого скрипта длинный список включаемых файлов по одному на каждый класс.

    В PHP 5 в этом больше нет необходимости. Вы можете определить функцию __autoload() , которая автоматически будет вызываться в случае использования класса, который не был определен выше. Вызывая такую функцию, Zend Engine дает возможность загрузить файл с определением класса прежде, чем будет сформировано сообщение об ошибке и выполнение скрипта прекратится.

    <?php
    function __autoload($class_name) {
         include_once(
    $class_name . "php");
    }

    $obj  = new MyClass1();
    $obj2 = new MyClass2();
    ?>

  2. Обработка исключительных ситуаций (исключений)
  3. PHP 5 добавляет парадигму обработки исключений, вводя структуру try/throw/catch. Вам остается только создать объекты, которые наследуют класс исключений Exception.

    <?php
    class SQLException extends Exception {
         public
    $problem;
         function
    __construct($problem) {
            
    $this->problem = $problem;
         }
    }

    try {
         ...
         throw new
    SQLException("Couldn't connect to database");
         ...
    } catch (
    SQLException $e) {
         print
    "Caught an SQLException with problem $obj->problem";
    } catch (
    Exception $e) {
         print
    "Caught unrecognized exception";
    }
    ?>

    В настоящее время в целях обратной совместимости большинство внутренних функций не использует исключения. Однако, все новые расширения будут иметь такую возможность, и вы можете использовать такую конструкцию в своем исходном тексте. Кроме того, подобно уже существующей функции set_error_handler(), вы можете использовать set_exception_handler(), чтобы отловить необработанное исключение прежде, чем выполнение скрипта будет закончено.

  4. Сравнение объектов
  5. В PHP 5 сравнение объектов является более сложным процессом, чем в PHP 4, а также процессом, более соответствующим идеологии объектно-ориентированного языка.

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

    С другой стороны, при использовании оператора идентичности (===), свойства объекта считаются идентичными тогда и только тогда, когда они ссылаются на один и тот же экземпляр одного и того же класса.

    Следующий пример внесёт ясность.

    <?php
    function bool2str($bool) {
         if (
    $bool === false) {
                 return 
    'FALSE';
         } else {
                 return 
    'TRUE';
         }
    }

    function 
    compareObjects(&$o1, &$o2) {
         echo 
    'o1 == o2 : '.bool2str($o1 == $o2)."\n";
         echo 
    'o1 != o2 : '.bool2str($o1 != $o2)."\n";
         echo 
    'o1 === o2 : '.bool2str($o1 === $o2)."\n";
         echo 
    'o1 !== o2 : '.bool2str($o1 !== $o2)."\n";
    }

    class 
    Flag {
         var 
    $flag;

         function 
    Flag($flag=true) {
                
    $this->flag $flag;
         }
    }

    class 
    OtherFlag {
         var 
    $flag;

         function 
    OtherFlag($flag=true) {
                
    $this->flag $flag;
         }
    }

    $o = new Flag();
    $p = new Flag();
    $q $o;
    $r = new OtherFlag();

    echo 
    "Два экземпляра одного и того же класса\n";
    compareObjects($o$p);

    echo 
    "\nДве ссылки на один и тот же экземпляр\n";
    compareObjects($o$q);

    echo 
    "\nЭкземпляры двух разных классов\n";
    compareObjects($o$r);
    ?>

    Результатом выполнения этого кода будет:

    Два экземпляра одного и того же класса
    o1 == o2 : TRUE
    o1 != o2 : FALSE
    o1 === o2 : FALSE
    o1 !== o2 : TRUE

    Две ссылки на один и тот же экземпляр
    o1 == o2 : TRUE
    o1 != o2 : FALSE
    o1 === o2 : TRUE
    o1 !== o2 : FALSE

    Экземпляры двух разных классов
    o1 == o2 : FALSE
    o1 != o2 : TRUE
    o1 === o2 : FALSE
    o1 !== o2 : TRUE

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

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

 
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS