PHP-4 «официально» умер. Тем кто был к нему так сильно привязан, мой совет - идите вслед за ним. А мы смотрим в будущее и пытаемся сделать его чуточку лучше.

PHP 6 - Делай код совместимым

Мне давно была интересна 6я версия PHP. Давно читал про планируемые изменения. Ну вот дошли руки и глаза попробовать «снэпшот» шестерки своими скриптами. Посмотрим что из этого получиться?

Скачал, распаковал, собрал… правда не с первого раза - как всегда пришлось доставлять в систему библиотеки.

Компилировал только с тем что на данный момент действительно часто использую

./configure --prefix=/home/max/local/ --enable-FEATURE --with-config-file-path=/home/max/local/etc \
--disable-short-tags --disable-ipv6 --with-zlib --with-bz2 --with-curl --enable-exif --enable-ftp \
--with-gd --with-mysql --with-mysql-sock=/var/run/mysqld --with-mysqli --enable-pcntl --disable-pdo \
--enable-shmop --enable-soap --enable-sockets --without-sqlite --with-tidy --with-xsl --enable-zip

Пока исполняется make поговорим о нововведениях.

Разработчики обещали полную поддержку юникода. Мне это в радость - уже год моя системная локаль UTF-8, и все проекты я пишу именно в UTF-8. Пространства имен (namespaces) уже включены в PHP-5.3 и это есть хорошо. Но это все нововведения, глобальные же изменения научат ньюбов писать код правильно. Итак о глобальных ниже.

Враг аккуратного разрабтчика - magic_quotes послан в /dev/null. Ура товарищи! он так мешал мне в четверке…. Насколько я знаю - все что он делал , это автоматически экранировал кавычки (двойные и одинарные) , слэши и что-то еще. Но на все это есть встроенные функции - зачем же делать это автоматом? Иногда это очень мешает, хотя все равно обходится ближайшим двором. Ура! Это извращение умерло!

Еще один враг - safe_mode! Туда же его, туда же!!! Слава богу мне не разу не удалось с ним столкнуться. Поэтому о его вредоносном влиянии я только наслышан.

Разрешите представить - враг всех времен и народов register_globals. Уйдет навсегда! УРА! Только ньюбских тупых вопросов на форумах от этого прибавится в разы. Ну ничего! Мы их научим. Если вспомним что такое register_globals… я то вот давно забыл что такую опцию можно включить - а вы?

Тем, кому так дорога четвертая версия вернут var. Он просто станет псевдонимом public. Лично мне от этого ни горячо, ни холодно - у меня плотная ассоциация var - значит JavaScript.

Хватит возвращать объекты по ссылке принудительно. Типа: $b = &new ClassName(); или return &$alpha; или public function &somefunct(){ … ХВАТИТ! Объекты в пятой версии PHP и так передаются по ссылке! В шестой версии принудительная передача по ссылке того, что и так пойдет по ней будет вызывать E_STRICT.

Где-то давно я читал, что есть непонятные массивы типа $HTTP_GET_VARS , $HTTP_POST_VARS. Если вы тоже об этом где-то когда-то зачем-то читали - Забудьте в шестой версии PHP их нет!!!

Ну вот и все о главных нововведениях. Пора попробовать свой код на новой версии PHP.

cp /etc/php5/cli/php.ini /home/max/local/etc/

Я думаю, что не заработает - ибо кучу всего нужно будет переписать в конфиге

max@maximus:/var/www/cms.my/lib$ /home/max/local/bin/php ./runtest
PHP Warning:  Directive 'register_long_arrays' 
is no longer supported in PHP 6 
and greater in Unknown on line 0

PHP Warning:  Directive 'magic_quotes_gpc' 
is no longer supported in PHP 6 
and greater in Unknown on line 0
Xdebug requires 
Zend Engine API version 220060519.
The Zend Engine API version 320070729 
which is installed, 
is newer.
Contact Derick Rethans 
at http://xdebug.org 
for a later version of Xdebug.

max@maximus:/var/www/cms.my/lib$   

Что и требовалось доказать. Все сообщения понятны - правим конфиг. Недавно я обновлял из деб-пакетов пятерку и разрешил переписать мой php.ini, а затем просто дописал конфиг xdebug. Так вот теперь оказалось что у меня включены длинные массивы, глобальные переменные…. больше никогда не разрешу переписать мой конфиг…

/home/max/local/bin/php более не выдает ошибок, но тесты по собственной библиотеке запустить так и не удалось :-) . Скрипт молча вылетает, причем непонятно где!

Для тестов я использую Limb Unit, который в свою очередь включает в себя SimpleTest. При разборе полета выяснилось, что вылетает на Limb Unit, а при исправлении устаревших конструкций начинает вылетать внутри SimpleTest.

Всего несколько небольших изменений и тесты проходят. Мой код совместим с шестеркой. Ура! А ваш?

З.Ы. PHP Умер! Да здравствует PHP! хотя здравствует пока пятый, но равнение держим уже на шестой!

Последние изменения: %2010/%03/%22 %01:%Mar