PHP-4 «официально» умер. Тем кто был к нему так сильно привязан, мой совет - идите вслед за ним. А мы смотрим в будущее и пытаемся сделать его чуточку лучше.
Мне давно была интересна 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! хотя здравствует пока пятый, но равнение держим уже на шестой!