Главная | Статьи | Регистрация | Вход | RSS
Меню сайта
Смотрю Mac блог!
Категории каталога
PHP [6]
статьи по установки скриптов, описание функций и т.д.
PHP5 [5]
статьи по php5, новые возможности и функции
Хостинг (Hosting) [4]
описания работы с хостингом
Свой сервер [2]
описание как создать и запустить свой сервер с Apache, PHP, MySQL
Средства разработки [3]
утилиты и помощники при разработки веб-приложения
Рекламные статьи [1]
ссылки:
Друзья сайта
Статистика
PHP5
Главная » Статьи » PHP5

Новые возможности языка (2я часть)

Преобразование ссылок на объекты, возращенные из методов

В PHP4 достаточно серьезным неудобством был вызов цепочки методов. Связано это было с тем, что невозможно создать объект без ссылки на него, поскольку объекты фактически являлись только синтаксической конструкцией и на уровне ядра были эквивалентны массивам.

PHP5 избавился от этого ограничения, позволив вызывать цепочку методов в одном операторе.

Код:
<?
class MyClass1
{
    function Process(MyClass1 $Object)
    {
        echo "Function Process in MyClass1 class<br>\n";
    }
}

class MyClass2
{
    function Process(MyClass1 $Object)
    {
        echo "Function Process in MyClass2 class<br>\n";

        return $Object;
    }
}

$Object1 = new MyClass1();
$Object2 = new MyClass2();
$Object2->Process($Object1)->Process($Object1);
?>

В PHP4 в этом случае необходимо было использовать следующую конструкцию:
<?
$Object3 = $Object2->Process($Object1);
$Object3->Process($Object1);
?>

Вывод:
Function Process in MyClass2 class
Function Process in MyClass1 class

Итератор по атрибутам класса

Все переменные класса, доступные в текущем контексте, могут быть перебраны циклом foreach. Такая итерация по свойствам объекта может, например, пригодиться при клонировании объектов.

Код:
<?
class MyClass
{
    public $Property1 = 1;
    public $Property2 = 2;
}

$Object = new MyClass;

foreach ($Object as $PropName => $PropValue)
{
    echo $PropName . " = " . $PropValue . "<br>\n";
}
?>

Вывод:
Property1 = 1
Property2 = 2

Указание типов объектов при вызове методов

В PHP5 для параметров функций можно задавать класс, объект которого может быть передан по этому параметру. Это позволяет избежать ошибки при передаче объектов другого класса и избавляет от необходимости дополнительной проверки.

Код:
<?
class MyClass1
{
}

class MyClass2
{
    public function Process(MyClass1 $Object)
    {
        echo "Function Process in MyClass2 class<br>\n";
    }
}

$Object1 = new MyClass1();
$Object2 = new MyClass2();
$Object2->Process($Object1);
?>

Вывод:
Function Process in MyClass2 class

Проверка объекта на принадлежность классу

Новый оператор instanceof позволяет проверить, попадает ли проверяемый класс в список дерева наследования класса, экземпляром которого является проверяемый объект.

Код:
<?
class MyClass
{
}

$Object = new MyClass;

if ($Object instanceof MyClass)
{
    echo "Object instance of MyClass class<br>\n";
}
?>

Вывод:
Object instance of MyClass class

Обработка обращений к несуществующим атрибутам

В PHP5 появилась возможность перехватывать обращение к несуществующим или закрытым свойствам класса. Для этого были введены два новых метода __get() и __set(). Вызов этих методов происходит только при обращении к несуществующим переменным класса, или переменным объявленным как private или protected.

Код:
<?
class MyClass
{
    function __set($Name, $Value)
    {
        print("You tried to put $Value in $Name<br>\n");
    }

    function __get($Name)
    {
        print("You tried to get value from $Name<br>\n");
    }
}

$Object = new MyClass();
$Object->Property = 5;

echo $Object->Property;
?>

Вывод:
You tried to put 5 in Property
You tried to get value from Property

Обработка обращений к несуществующим методам

Помимо возможности обработки обращения к несуществующим свойствам в PHP5 можно так же перехватывать обращения к несуществующим или закрытым методам классов. Для этого в классе необходимо реализовать специальный метод с именем __call().

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

Код:
<?
class MyClass
{
    function __call($Name, $Args)
    {
        echo "You call method '$Name'<br>\n";
    }
}

$Object = new MyClass();
$Object->Method();
?>

Вывод:
You call method Method

Преобразование объекта в строку

В PHP4, когда переменная-объект преобразуется в строку, получается текст следующего вида «Object id #n», где n – номер объекта в глобальной таблице объектов. В PHP5 появилась возможность изменить это поведение. Если в классе создать специальный метод с именем __tostring(), то за строковое представление текущего объекта будет уже отвечать он.

Код:
<?
class MyClass
{
    function __tostring()
    {
        return "String from MyClass class<br>\n";
    }
}

$Object = new MyClass;

echo $Object;
?>

Вывод:
String from MyClass class

Автоматическая загрузка классов

Еще одним нововведением PHP5 стало появление специальной функции __autoload(), которая автоматически вызывается при попытке обращения к неизвестному классу или интерфейсу. Под обращением понимается попытка создания объекта класса, создание класса-потомка на основе класса или создание класса, реализующего интерфейс.

Код:
<?
function __autoload($ClassName)
{
    echo "Request loading class '$ClassName'<br>\n";

    include_once("autoload.inc");
}

$Object = new MyClass();
?>

Файл autoload.inc:
<?
class MyClass
{
    function __construct()
    {
        echo "MyClass class constructor<br>\n";
    }
}
?>

Вывод:
Request loading class 'MyClass'
MyClass class constructor

Новая константа с именем класса и метода

В PHP5 появилась константа __METHOD__, которая стала хорошим дополнением к уже существующим «магическим» константам PHP4. Новая константа возвращает имя класса и имя метода, разделенные двумя двоеточиями.

Код:
<?
class MyClass
{
    function Display()
    {
        echo "This is " . __METHOD__ . " method<br>\n";
    }
}

$Object = new MyClass;
$Object->Display();
?>

Вывод:
This is MyClass::Display method



Источник: http://dak.mmforce.net/message.php?mid=1520
Категория: PHP5 | Добавил: php (12.12.2007)
Просмотров: 8387 | Комментарии: 2
Всего комментариев: 1
06.07.2013
1. Louboutin Pas Cher [Материал]
Jay-Z not to mention better half Beyonce relax coming from carin ,1,S - f because of their baby girlfriend Blue Ivy and appreciate an amorous dinner time around T http://www.longchamp-le-pliage-sale.com/ - Longchamp Sale ew #fi http://chaussures-louboutin.tripod.com - Chaussures Louboutin le_links[D:\keywords1.txt,1,S - You are able to Municipality's Battery Meadow.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

  • Денвер (Denwer)
  • PHP Compiler
  • Что такое Хостинг?
  • Что такое Сервер?
  • Установка Форума ExBB ( без MySQL )
  • Новые возможности языка
  • Новые возможности языка (2я часть)
  • Новые возможности языка (3я часть)
  • Macromedia Dreamweaver 4
  • Ошибки PHP программиста
  • Уроки и статьи по PHP, PHP5. Скрипты для сайта, скрипты форумов, новостные, cms. Инфо: . Скрипты для скачивания.
    Copyright VLP © 2020