Эта серия статей посвящена новым особенностям 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 в PHPecho "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. В PHP V5.3 исключены несколько проблематичных директив для этого файла, таких как zend.ze1_compatibility_mode. Кроме того, значительно повысилась гибкость при работе с этим файлом.
В файл php.ini внесено два важных усовершенствования:
- Внутри файла php.ini теперь можно использовать переменные. Это очень удобно для удаления из файла избыточности, и файл стало легче модифицировать (листинг 5).
Листинг 5. Переменные в файле php.inifoo = 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, где сообщается о любых изменениях, которые могут повлиять на приложения.
Научиться
- Оригинал статьи (EN).
-
Подробнее о замыканиях в
Wikipedia (EN).
-
PHP For Windows — предназначен для поддержки РНР под Microsoft Windows. Поддерживает также перенос расширений или функций РНР и содержит отдельные сборки для разных архитектур Windows. (EN)
-
PHP wiki — сведения обо всех изменениях в версии PHP V5.3.(EN)
-
"A PHP V5
migration guide" — о том, как перенести на V5 код, разработанный для PHP V4 (EN).
-
"Connecting
PHP Applications to Apache Derby" — о том, как установить и сконфигурировать РНР на Windows (некоторые шаги применимы к Linux®) (EN).
- Серия руководств developerWorks по программированию на PHP:
"Learning PHP, Part 1," Part 2 и Part 3 (EN).
-
Planet PHP — источник новостей сообщества разработчиков PHP.(EN)
-
PHP Manual — сведения об объектах данных РНР и их возможностях (EN).
-
Safari Books Online — масса ресурсов по технологиям open source. (EN)
-
PHP.net — центральный ресурс для PHP-разработчиков (EN).
-
"Список литературы по PHP (EN)."
-
developerWorks в Twitter.(EN)
-
Ресурсы проекта PHP на IBM developerWorks.(EN)
-
Интервью и дискуссии разработчиков в подкастах developerWorks.(EN)
-
Для тех, кто использует PHP с базами данных. Zend Core for
IBM, готовая среда разработки РНР с поддержкой IBM DB2 V9.(EN)
-
Технические мероприятия и сеансы Web-вещания на developerWorks.(EN)
-
Будущие конференции, выставки и другие мероприятия во всем мире, интересные для open source-разработчиков IBM. (EN)
-
Познакомьтесь с технологиями IBM и open source при помощи бесплатных демонстраций по требованию на developerWorks.(EN)
Получить продукты и технологии
-
PHPMyAdmin — популярное РНР-приложение, упакованное в архив Phar для использования в качестве примера того, как легко работать с такими архивами. (EN)
-
PHP V5.2.6(EN)
-
Ознакомительное ПО IBM можно загрузить или заказать на DVD.(EN)
Обсудить
- Примите участие в обсуждении материала на форуме.
-
Примите участие в блогах и в жизни сообщества developerWorks.(EN)
-
Примите участие в PHP-форуме developerWorks: Разработка РНР-приложений с применением продуктов IBM Information Management (DB2, IDS).(EN)
Джон Мертик (John Mertic) получил диплом инженера по вычислительной технике в университете Kent State University и в настоящее время работает инженером-программистом в компании SugarCRM. Он участвовал во многих проектах open source, главным образом в РНР-проектах; является создателем и хранителем PHP Windows Installer.