Что нового в PHP V5.3: Часть 5. Обновление версии PHP V5.2

Изменения, совместимость и нежелательные функции

Серия статей Что нового в PHP V5.3" посвящена новым замечательным особенностям версии PHP V5.3, которую планируется выпустить в ближайшем будущем. В первой части рассматриваются изменения в объектно-ориентированном программировании и управлении объектами в PHP V5.3, во второй - лямбда-функции и замыкания. В третьей части мы рассмотрели пространства имен, одну из наиболее ожидаемых и обсуждаемых особенностей этой версии РНР. Часть 4 посвящена формату архива Phar, который можно использовать внутри РНР. Из этой последней статьи данной серии вы узнаете, на что надо обратить внимание при обновлении версии PHP V5.2. В новой версии есть изменения, нарушающие совместимость с предыдущими версиями, а ряд функций не рекомендован к применению, потому что в следующих версиях их не будет. Описываются также некоторые усовершенствования существующих функций РНР.

Джон Мертик, инженер-программист, SugarCRM

Джон Мертик (John Mertic) получил диплом инженера по вычислительной технике в университете Kent State University и в настоящее время работает инженером-программистом в компании SugarCRM. Он участвовал во многих проектах open source, главным образом в РНР-проектах; является создателем и хранителем PHP Windows Installer.



09.06.2010

Введение

Эта серия статей посвящена новым особенностям PHP V5.3, таким как пространства имен, замыкания, управление объектами, объектно-ориентированное программирование и архивы Phar. Все эти замечательные новинки стали приятным дополнением к языку, но задача PHP V5.3 заключается еще и в дальнейшей рационализации РНР. Эта версия опирается на популярную и стабильную версию PHP V5.2 и усиливает язык, делая его более мощным. В настоящей статье мы расскажем об этих изменениях и о том, на что следует обратить внимание при обновлении V5.2.


Изменения в синтаксисе

Дополнения к языку, такие как пространства имен и замыкания (обсуждаются в части 2 и части 3), привели к добавлению новых зарезервированных слов. Начиная с PHP V5.3, namespace больше нельзя применять в качестве идентификатора. Класс closure стал зарезервированным классом, но пока остается допустимым идентификатором. В листинге 1 приведены примеры операторов, которые больше не работают в PHP V5.3 из-за добавленных зарезервированных слов.

Листинг 1. Недопустимые операторы PHP
// приведенное ниже определение функции в PHP 5.3 вызовет фатальную ошибку,  
// хотя отлично работает в версии 5.2
function namespace() 
{
....
}

// и это определение класса тоже
class Closure
{
....
}

В PHP V5.3 добавлена поддержка оператора goto. Теперь goto— это зарезервированное слово. Операторы goto редко используются в современных языках (помните, как они применялись в BASIC?), но иногда все же применяются там, где это удобно. В листинге 2 приведен пример, иллюстрирующий их работу.

Листинг 2. Операторы goto в PHP
echo "This text will get outputted";
goto a;

echo "This text will get skipped";

a:
echo "This text will get outputted";

Одно возможное применение для операторов goto— это выход из глубоко вложенных циклов и операторов if. Это делает код гораздо более читабельным.


Изменения в функциях и методах

Больших изменений в функциях и методах PHP V5.3 не произошло, но есть ряд усовершенствований, которые помогают решить проблемы РНР и повысить производительность. В этом разделе обсуждаются некоторые наиболее заметные из этих изменений.

В предыдущих версиях РНР функции массивов atsort, natcasesort, usort, uasort, uksort, array_flip и array_unique допускали передачу в качестве параметров объектов вместо массивов. При этом эти функции рассматривали свойства объектов как ключи и значения массива. В PHP V5.3 этого больше нет, поэтому сначала надо привести объекты к массивам. В листинге 3 показано, как следует изменить код.

Листинг 3. Изменение кода для приведения объектов к массивам в определенных функциях
$obj = new stdClass;
$obj->a = '1';
$obj->b = '2';
$obj->c = '3';

print_r(array_flip($obj)); // НЕ будет работать в PHP 5.3, но работает в PHP 5.2

print_r(array_flip((array) $obj)); // работает в PHP 5.3 и 5.2

Методы магических классов стали гораздо более строгими. Следующие методы должны иметь публичную видимость:

  • __get
  • __set
  • __isset
  • __unset
  • __call

Чтобы обойти это изменение, можно использовать новый магический метод __callStatic() в тех случаях, когда __call применяется в статическом контексте. Требуемые аргументы для этих методов обязательны и должны присутствовать, за исключением магического метода __isString(), который не принимает аргументов. В листинге 4 показано, как использовать эти методы и обязательные параметры для них.

Листинг 4. Применение магических методов
class Foo
{
    public function __get($key) {} // должен быть публичным и имеет единственный параметр
    public function __set($key,$val) {} // должен быть публичным и имеет два параметра

    public function __toString() {} должен быть публичным и не имеет параметров
}

Несколько функций, которые раньше не поддерживались в РНР под Windows, в версии PHP V5.3 поддерживаются. Например, функция getopt(), предназначенная для обработки опций вызова сценария РНР из командной строки. Под Windows® теперь работают и функции кодирования и декодирования интернет-адресов inet_ntop() и inet_pton(). Также теперь поддерживаются под Windows несколько математических функций, в частности, asinh(), acosh(), atanh(), log1p() и expm1().


Изменения в расширениях

Питомником новых расширений в РНР служит библиотека PHP Extension C Library (PECL). Когда расширение становится зрелым и стабильным и рассматривается как полезная функция в составе основного дистрибутива, оно часто добавляется к нему при выходе новой версии. Начиная с версии PHP V5.3, частью основного дистрибутива PHP становятся следующие расширения.

FileInfo
Предоставляет функции, помогающие определить тип контента и кодировку файла, разыскивая в файле определенную характерную последовательность байт-символов.
intl
Оболочка для библиотеки International Components for Unicode (ICU), которая предоставляет функции для поддержки unicode и глобализации.
Phar
Инструмент архивирования РНР, обсуждавшийся в части 4.
mysqlnd
Стандартный драйвер РНР для доступа к базам данных MySQL взамен прежних расширений MySQL и MySQLi, которые использовали библиотеку libmysql.
SQLite3
Библиотека для работы с базами данных SQLite V3.

Когда расширение перестает активно поддерживаться или считается не заслуживающим распространения с основным дистрибутивом РНР, оно часто переносится в PECL. В рамках реорганизации PHP V5.3 следующие расширения выведены из ядра дистрибутива РНР и становятся частью PECL.

ncurses
Эмуляция библиотеки curses, которая используется для отображения графического вывода в командной строке.
fpdf
Управляет созданием и использованием форм и данных формы в документах PDF.
dbase
Обеспечивает поддержку чтения и записи dbase-совместимых файлов.
fbsql
Поддерживает доступ к базам данных на серверах Frontbase.
ming
Библиотека open source, позволяющая создавать анимации Flash 4.

Расширение Sybase полностью удалено и заменено расширением sybase_ct. Последнее расширение полностью совместимо с первым и не должно вызвать проблем. Новая функция использует клиентские библиотеки Sybase, которые нужно установить на Web-сервере.


Изменения в процессе сборки

Благодаря строгому курсу на модернизацию процесса сборки в PHP V5.3 этот процесс облегчился на всех платформах. Чтобы поддерживать соответствие между сборками РНР и обеспечить гарантированный набор компонентов в РНР, в сборке больше нельзя запрещать расширения PCRE, Reflection и SPL. Теперь можно создавать распространяемые РНР-приложения с использованием этих расширений, и они будут гарантированно доступны для использования.

В прошлом году сборками PHP для Windows занялась новая группа. Начиная с PHP V5.3 она будет вносить ряд усовершенствований для пользователей под Windows. Новые сборки нацелены на архитектуру 586 (Intel® Pentium® или более поздние версии) и потребуют Windows 2000/XP или более поздней версии Windows, исключив поддержку Windows 98/NT и более ранних версий. Появятся сборки PHP, выполненные при помощи Microsoft® Visual Studio® 2008, и сборки, предназначенные для архитектуры x86-64. Они обеспечат повышенную производительность при работе с FastCGI на веб-сервере Microsoft IIS или со сборкой Apache, полученной при помощи того же компилятора на той же архитектуре. Инсталлятор для Windows тоже будет усовершенствован, чтобы лучше конфигурировать РНР с Web-сервером Microsoft IIS. Новая группа открыла специальный Web-сайт, посвященный PHP на Windows (см. Ресурсы).


Изменения в файлах .ini

Важная особенность РНР заключается в том, что его поведение можно настраивать при помощи файла.ini. В PHP V5.3 исключены несколько проблематичных директив для этого файла, таких как zend.ze1_compatibility_mode. Кроме того, значительно повысилась гибкость при работе с этим файлом.

В файл php.ini внесено два важных усовершенствования:

  • Внутри файла php.ini теперь можно использовать переменные. Это очень удобно для удаления из файла избыточности, и файл стало легче модифицировать (листинг 5).
    Листинг 5. Переменные в файле php.ini
    foo = bar 
    
    [section] 
    newfoo = ${foo}
    foo и newfoo имеют одно и то же значение.
  • Можно задавать параметры PHP ini для каталога и для сайта, как это делается в файлах конфигурации Apache. Преимущество этого подхода состоит в том, что синтаксис становится согласованным для всех разнообразных SAPI, которые могут работать в PHP (листинг 6).
    Листинг 6. Параметры настройки .ini для каталога и для сайта
    [PATH=/var/www/site1] 
    
    ; эти директивы применяются только к файлам РНР из каталога /var/www/site1
    
    [HOST=www.example.com] 
    
    ; эти директивы применяются только к файлам РНР на Web-сайте www.example.com.

Эти директивы .ini можно помещать также в определяемые пользователем файлы .ini, расположенные в самой файловой системе, как файлы .htaccess в Web-сервере HTTP Apache. Имя по умолчанию для этих файлов определяется директивой user_ini.filename. Данную возможность можно запретить, установив в этой директиве пустое значение. Директивы для сайта и для каталога не могут быть изменены в определяемом пользователем файле .ini.


Нежелательные функции

С версии PHP V5.3 начинается официальное исключение старых функций, которые станут недоступными в будущих версиях РНР. При использовании этих функций будет выдаваться сообщение об ошибке E_DEPRECATED. В PHP V5.3 не рекомендуется использовать следующие функции:

  • Импульсы (declare(ticks=N) и register_tick_function() ), предназначенные для вызова функции при каждом n-м исполнении оператора парсером внутри блока declare(). Они исключаются ввиду многочисленных сбоев при их работе и редкого применения этих функций.
  • Функция define_syslog_variables(), которая инициализирует все переменные, относящиеся к syslog. Она больше не требуется, так как определяемые этой функцией константы уже определены глобально. Достаточно простого исключения всех обращений к этой функции.
  • Функции регулярных выражений ereg. Вместо них рекомендуется использовать функции регулярных выражений PCRE, так как они гораздо быстрее работают и лучше подходят для регулярных выражений, используемых в других языках и приложениях. Поддержка функций ereg исключена, так что РНР можно стандартизовать на одном механизме регулярных выражений.

В PHP V5.3 рекомендуется отказаться от перечисленных выше функций. В последующих капитальных версиях РНР они уже не будут поддерживаться.


Заключение

В PHP V5.3 появилось много новых функций и «вычищено» несколько устаревших. Существуют отдельные проблемы совместимости с предыдущими версиями. В этой статье приведены некоторые рекомендации по модернизации Web-приложений для работы с PHP V5.3. Последние сведения о PHP V5.3 содержатся в PHP wiki, где сообщается о любых изменениях, которые могут повлиять на приложения.

Ресурсы

Научиться

Получить продукты и технологии

  • PHPMyAdmin— популярное РНР-приложение, упакованное в архив Phar для использования в качестве примера того, как легко работать с такими архивами. (EN)
  • PHP V5.2.6(EN)
  • Ознакомительное ПО IBM можно загрузить или заказать на DVD.(EN)

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Open source
ArticleID=495070
ArticleTitle=Что нового в PHP V5.3: Часть 5. Обновление версии PHP V5.2
publish-date=06092010