Глобальные изменения в PHP 5.4

Опубликовано 16 Май 2012. Автор:

Речь в данной статье пойдет о следующем:

 

 

  1. Особенности PHP 5.4
  2. Что удалено, и что считается устаревшим в PHP 5.4 по сравнению с предыдущей версией PHP 5.3
  3. Предложенный, но не реализованный (пока) функционал
  4. Необходимо ли переходить на PHP 5.4
  5. Выводы

Итак, поехали…

Стабильная версия PHP 5.4 планировалась к выходу 2 февраля 2012г., однако на официальном сайте php.net объявлено о релизе было только 1 марта 2012г. Все-таки без задержки не обошлось, хотя и не значительной. В настоящее время уже выпущены и обновления PHP 5.4.1, 5.4.2 и 5.4.3. Данные обновления включают только фиксы багов, уязвимостей и не добавляют в функционал ничего нового. Но хватит о грустном. Позвольте мне рассказать  вам о некоторых из наиболее интересных возможностях в этой версии.

Особенности PHP 5.4

1.1 Traits (трэйты).

PHP не поддерживает множественное наследование. Это означает, что в отличие от таких языков, как C ++, в PHP невозможно создать один класс, наследующий поведение нескольких других классов. Однако, в PHP реализована возможность иметь множественные интерфейсы для работы с классами (traits). Этот простой подход заимствован разработчиками у языка Java, что позволяет избежать проблемы неоднозначности, присущей C++.

Trait’s обеспечивают более простую альтернативу. Вы можете определить трэйт практически так же, как определить класс или интерфейс с любыми необходимыми функциями.

Пример кода:

  trait ezcReflectionReturnInfo {
    function getReturnType() { /*1*/ }
    function getReturnDescription() { /*2*/ }
  }

  class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
  }

  class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* ... */
  }

1.2 Встроенный Web server (Веб-сервер)!

Неожиданно не правда ли? Тем не менее, разработчики решили сделать такую фишку.

Как не печально, но распространенный среди разработчиков PHP веб-сервер Apache в последние годы теряет популярность, уступая места более быстрым и производительным nginx или lighthttpd. Apache сложен в настройке и для разработки небольших проектов или отдельных модулей, скриптов не целесообразно “поднимать” каждый раз веб-сервер Apache, так как более менее нормальная его настройка отнимает достаточно много времени.

Встроенный в PHP 5.4 веб-сервер решает эту задачу и экономит время. Встроенный в PHP веб-сервер доступен для запуска опциями командной строки php. Это означает, что пользователю достаточно всего лишь выполнить одну простейшую команду, что бы запустить свой сервер и иметь возможность выполнять собственные скрипты по HTTP, например через браузер.

Пример команды, которая запускает встроенный в PHP веб-сервер:

$ php -S 192.168.1.17:81

Далее на стандартный вывод идет информация о том, как прекратить работу веб-сервера и, собственно, лог запросов:

Server is listening on 192.168.1.17:81... Press CTRL-C to quit.
[Thu May  16 21:42:06 2012] ::1:42513: /

 1.3 Явная типизация данных. Двоичная запись целых чисел.

Если у Вас была необходимость представлять строковые значения в php коде в десятеричной, шестнадцатеричной или восьмеричной системах счисления, то теперь в PHP 5.4 у Вас также появилась возможность представлять их в двоичном виде!

Для представления в восьмеричной записи у значения задается префикс 0 (ноль). Например, 010 обозначает десятеричное число 8, а не 10, как некоторые могут подумать.

В шестнадцатеричной – используется префикс 0x (ноль+икс), например 0×12 представляет собой десятеричное число 18.

В двоичной – добавляется префикс 0b (ноль+би), например десятеричное  число 5 будет представлено как 0b101.

1.4 Короткая запись массивов в PHP.

Популярность JSON сделала этот  формат общепринятым для обмена сериализованными данными между программами, независимо от того на каком языка они были написаны. Одним из основных различий в записи массивов между JSON и PHP является то, что массивы JSON представлены в квадратных скобках [], вместо обычного PHP-массива в круглых скобках (). Некоторые люди предложили добавить поддержку для более короткого синтаксиса записи массивов, аналогичного JSON. Это предложение не было одобрено многими из основных разработчиков PHP, но большое количество пользователей  проголосовали за добавление  этого нововведения.

Так что теперь можно определить массив следующим образом:

$a = [1, 2, 3];
$b = ['foo': 'orange', 'bar': 'apple', 'baz': 'lemon'];

Что устарело или было удалено в PHP 5.4

В некоторых релизах PHP вроде бы привычный функционал становится устаревшим, а после удаляется. Как правило, это происходит при значительной смене версии, например между PHP 5.3 и PHP 5.4.

Итак, начнем с magic_quotes или, как их называют по-русски – “волшебные кавычки“. В PHP 5.4 вообще удалена эта функциональная возможность, тогда как в PHP 5.3 она считалась устаревшей (DEPRECATED) . Причина удаления проста как мир. Эскейп последовательности в разных реализациях СУБД разные – в mysql одни, в sqlite другие, в Oracle или MSSQL третьи. Для экранирования MySQL escape-последовательностей рекомендуется использовать функцию mysql_real_escape_string ().

Идем дальше… register_globals выпилена окончательно! Ура товарищи! Как же я рад, что наконец-таки эта совершенно ненужная и в неумелых и не знающих руках опасная для безопасности скриптов возможность удалена совсем! В PHP 5.3 она уже считалась устаревшей (DEPRECATED), а в PHP 5.4 считается удалённой :) . Можно бесконечно спорить разумно ли использовать register_globals или нет, но то что её все-таки удалили говорит о многом. А именно о том, что от неё больше минусов чем плюсов и от register_globals лучше избавиться.

safe_mod тоже пошёл под нож. Он также, как и вышеописанные претенденты в PHP 5.3 считался устаревшим, а в версии PHP 5.4 забанен окончательно. Для меня это немного печально, так как имею свой достаточно бурно развивающийся бесплатный хостинг, где у меня установлен PHP 5.3 и включен safe_mode для повышения безопасности. Но ничего. Все что не делается – все к лучшему!

Ниже приведу просто список того, что было удалено/изменено в PHP 5.4, так как самое важное я уже описал, а более подробно можно узнать на официальном сайте разработчиков PHP.

- break / continue – удалена возможность передачи переменной. Например так,

$num = 2; break $num;

- allow_call_time_pass_reference - удалено.

- PHP default_charset – теперь по умолчанию UTF-8.

- расширение sqlite перемещено в PECL.

register_long_arrays – удалено, как и register_globals.

- функции session_is_registered(), session_register() и session_unregister() - удалены.


Если Ваше мнение отличается от мнения автора статьи, то Вам сюда.

Комментарии (1)

 

  1. Вася пишет:

    Достаточно серьезные изменения. Спасибо за информацию… пойду переписывать скрипты :)

Оставить отзыв

Вы должны войти, чтобы оставить комментарий.