Перейти к тексту

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

При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

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

  • Закрыть [x]

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

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

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

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

  • Закрыть [x]

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

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

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

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

Больше статей из этой серии

Дата:  09.06.2010
Уровень сложности:  средний
Активность:  3121 просмотров
Комментарии:  


Введение

Эта серия статей посвящена новым особенностям 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)

Обсудить

Об авторе

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

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


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


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

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

 


При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Выберите ваше отображаемое имя

При первом входе в 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
author1-email=jmertic@gmail.com
author1-email-cc=bwetmore@us.ibm.com

Теги

Help
Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Используйте ползунок, чтобы отразить больше или меньше тегов.

КнопкаПопулярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere).

Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).

Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Кнопка Популярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere). Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).