Php 6 на подходе

Вы уже, наверное, в курсе, что группа разработчиков ядра PHP 6 встречалась в ноябре 2005 года в Париже. Это была захватывающая встреча, на которой разработчики обсудили развитие PHP со своей точки зрения. Прежде чем я начну свой рассказ о принятых решениях, вынужден предупредить - все что здесь перечислено, это не "100% решенные вопросы" и в окончательном релизе PHP 6 дела могут обстоять иначе. Конечно же, все эти моменты будут обсуждаться подробнее, но уже сейчас можно говорить о перспективах.

Юникод

Поддержка юникода в настоящий момент может быть установлена только на уровне "per request", т.е. для каждого запрашиваемого файла. Это означает, что PHP придется сохранять варианты классов, имен методов и функций одновременно в таблице символов Unicode и в non-Unicode, что, конечно же, увеличивает количество потребляемых ресурсов.

Разработчики решили сделать настройку юникода на уровне всего сервера, а не запроса. Отключение поддержки юникода, если таковая не требуется, может увеличить производительность строковых функций до 300% и приложений в целом до 25%.

Вынос настроек в php.ini позволит снять заботу о юникоде с разработчика и переложить ее на администраторов хоста. Если вы самостоятельно собираете PHP и несете всю ответственность за ваши серверы, то вам будет полезно знать, что для PHP 6 потребуются библиотеки ICU (в зависимости от того, будет ли нужен Unicode или нет).

Register Globals уйдут в прошлое

Попрощайтесь с этой настройкой, она будет окончательно убрана. Такой настройки больше не будет в php.ini и если вы ее внесете, то получите ошибку уровня E_CORE_ERROR. Это означает, что PHP 6 наконец-то завершит эру скриптов PHP 3. Это серьезный, но очень нужный шаг.

Magic Quotes будут исключены

Опция magic quotes будет так же исключена из PHP и при попытке включения такой настройки, "выскочит" ошибка E_CORE_ERROR. Это повлияет на magic_quotes, magic_quotes_sybase и magic_quotes_gpc.

Больше не будет Safe Mode

Это понравится тем, кто хостится на серверах с обязательным включением Safe Mode. Теперь, включение опции будет вызывать ошибку E_CORE_ERROR. Причиной для этого становится механизм посыла "сигнала опасности", который делает PHP более безопасным. Сохранится лишь open_basedir.

'var' будет полным алиасом (псевдонимом) 'public'

Var используется в классах PHP 4. В объектном подходе PHP 5, употребление var вызывает ошибку уровня E_STRICT. В PHP 6 предупреждение об ошибке будет устранено и var станет полным синонимом public. Это вполне нормальное решение, однако, те, кто "подогнал" свои скрипты под PHP 5, сделали в этом плане лишнюю работу.

Возврат по ссылке вызовет ошибку
И '$foo =& new StdClass()' и 'function &foo' теперь вызовут ошибку уровня E_STRICT.

Будет убрана совместимость с zend.ze1

Ze1 всегда пытался поддерживать старое поведение PHP 4, но не всегда "работал на 100%", поэтому в шестой версии PHP он будет полностью исключен.

Поддержка Freetype 1 и GD 1 будет убрана
Поддержка обоих (очень-очень старых) библиотек будет убрана.

dl() останется только в SAPI

Каждую функцию SAPI нужно будет регистрировать отдельно и только CLI и embed SAPI будут работать с этого момента. В других вариантах dl() работать не будет.

FastCGI всегда включена

FastCGI код будет "вылизан" и станет включенным по умолчанию для CGI SAPI.
При этом, поддержку FastCGI будет невозможно отключить.

Старые названия глобальных массивов будут удалены

Помните старые массивы HTTP_*_VARS? Если вы еще не начали использовать $_GET и $POST, то начните делать это прямо сейчас, потому что в PHP 6 эти массивы будут вызывать E_CORE_ERROR.

Перемещения расширений

Расширения XMLReader и XMLWriter войдут в дистрибутив и станут доступны по умолчанию. Расширение ereg для работы с регулярными выражениями переедет в PECL (т.е. будет удалено из PHP). Это означает, что PCRE будет по умолчанию недоступно и выключено. Такой шаг делается для включения нового расширения для работы с регулярными выражениями, основанными на ICU. Чрезвычайно полезное расширение Fileinfo будет включено в дистрибутив и доступно по умолчанию.

Дополнения к движку PHP

64 битный целочисленный тип данных

В движок будет добавлен новый тип данных - int64. Он будет использоваться по умолчанию для integer.

Goto

Никаких команд goto не будет добавлено. Однако, команда break расширится статической меткой, поэтому будет возможно написать break foo и это перекинет на метку foo: в вашем коде.

ifsetor()

Похоже, что мы не увидим эту функцию, что обидно. В операторе ?: можно будет опускать один параметр, что позволит писать так: "$foo = $_GET['foo'] ?: 42;" (т.е. если foo является истиной, то $foo будет равно 42). Это сэкономит немного кода, однако будет не так читаемо, как при использовании ifsetor().

foreach для многоуровневых массивов

Это отличное новшество - вы сможете проходить с помощью foreach по нескольким уровням массива, к примеру "foreach( $a as $k => list($a, $b))".

{} против []

Сейчас вы можете использовать и {} и [] для обращения к строковым индексам. Однако, запись {} уже сейчас вызовет E_STRICT в PHP 5.1 и будет полностью устранена в PHP 6. К тому же, [] частично заменят substr и array_slice и вы сможете использовать "[2,]" для получения символов от второго и до конца строки. Очень удобно.

Изменения в объектном стиле

Связка static

Будет добавлено новое ключевое слово для доступа к последующей связке - static::static2(), что позволит управлять static во время выполнения.

Пространства имен

Этот момент остается нерешенным и по сей день. Мой совет - не задерживайте дыхание.

Типизированные значения при возврате из функций

Разработчики высказались против типизации, потому как это "не в стиле PHP". Однако такая возможномть будет добавлена, но не решен вопрос ее синтаксиса. В любом случае, это будет полезная возможность.

Вызов динамческих функций как статических приведет к E_FATAL

Сейчас вы можете вызывать статические и динамические методы не обращая внимание на то, статические они или динамические. Вызов динамической функции как статической, вызовет E_FATAL.

Добавления в PHP
APC войдет в ядро

Работа APC с байткодом будет включена в основную поставку PHP в качестве стандарта, но, вероятно, не будет активизирована по-умолчанию, но результаты ее работы будут стимулировать хостеров включать эту опцию.

Hardened PHP патч

Этот патч выполняет большое количество дополнительных проверок на безопасность. Разработчики тщательно изучают этот патч и некоторые элементы найдут свое место в PHP: защита от разделения HTTP-запроса, allow_url_fopen будет разделена на две: allow_url_fopen и allow_url_include. Первая опция будет по-умолчанию включена, а вторая - отключена.

E_STRICT войдет в E_ALL

Вау, это серьезная штука! Сообщения об ошибках наконец-то войдут в E_ALL по умолчанию. Это демонстрирует старания разработчиков научить "лучшей практике программирования" посредством сообщений "Эй, ты делаешь неправильно!".

Источник: art.webobzor.net