Введение в PHP5
PHP5 ещё официально не вышел, но "рабочие" версии уже трудоспособны (равно как и нестабильны!), так что мы вполне можем начать изучение новых возможностей грядущего релиза PHP и попрактиковать с ними. В этой статье мы поговорим о трёх основных нововведениях в PHP5: новая объектная модель, исключения, пространства имён.
Но сначала пара официальных заявлений:
- Некоторые из приведённых в данной статье решений воспроизводимы в PHP4, но, тем не менее, их описание присутствует и здесь для большей удобочитаемости и целостности всей статьи.
- Некоторые из описанных в данной статье особенностей в конечном релизе PHP5 могут быть изменены.
PHP5 ещё не выпущен и мне неизвестно, когда это произойдёт, но уже сейчас вы можете потестировать и изучить новые возможности языка, скачав рабочую версию PHP5 с http://snaps.php.net и установив её. По этой ссылке вы можете найти готовые для установки Windows и Linux версии PHP5. Инсталляция проходит как у любого нормального релиза PHP, так что все бегом за новой игрушкой.
Новая объектная модель В PHP5 объектную модель основательно подлатали и добавили много новых возможностей, благодаря чему PHP5 стал "чем-то" напоминать Java. В этой части нашей статьи будет описана эта новая объектная модель и приведено несколько небольших примеров, чтобы вам обозначить исходный рубеж для ваших экспериментов.
- Конструкторы и деструкторы
- Объекты как ссылки
- Клонирование объектов
- Дескрипторы Private, Public и Protected
- Интерфейсы
- Абстрактные классы
- __call
- __set and __get
- Закрытые члены
Конструкторы и деструкторы В PHP4 конструктор именуется так же как и сам класс, а деструкторы отсутствуют полностью. В PHP5 конструктор класса именуется __construct, а деструктор - __destruct.
Пример 1: Конструкторы и деструкторы
class foo var $x ;
function __construct ( $x ) this -> x = $x ; function display () print( $this -> x ); function __destruct () { print( "ну, пока, до скорого" );
$o1 = new foo ( 4 ); $o1 -> display (); ?>
Как вы видите, деструктор вызывается перед самым уничтожением класса.
Объекты как ссылки Как вам уже наверняка известно, в PHP4 переменные передаются в функции/методы по значению (передаётся копия), если в объявлении функции не поставлен символ '&', указывающий на то, что переменная должна передаваться как ссылка. В PHP5 объекты передаются всегда как ссылки. Присваивание объектов тоже происходит по ссылке.
Пример 2: Объекты как ссылки
class foo var $x ;
function setX ( $x ) $this -> x = $x ;
function getX () return $this -> x ; $o1 = new foo ; $o1 -> setX ( 4 ); $o2 = $o1 ; $o1 -> setX ( 5 ); if( $o1 -> getX () == $o2 -> getX ()) print( "Ох ты, Боже мой!" );
Клонирование объектов Если объекты присваиваются и передаются по ссылке, то вам нужно как-то создавать и копии объектов. Для этого используйте метод __clone. Пример 3: Клонирование объектов
class foo var $x ;
function setX ( $x ) $this -> x = $x ;
function getX () return $this -> x ;
$o1 = new foo ; $o1 -> setX ( 4 ); $o2 = $o1 -> __clone (); $o1 -> setX ( 5 );
if( $o1 -> getX () != $o2 -> getX ()) print( "Копии взаимонезависимы" );
В программировании клонирование разрешено, так что всё легально.
|