![]() |
PHP 5.3: обзор
Дни идут чередой, погода улучшается, а между тем PHP 5.3 всё ближе и ближе — надо быть во всеоружии.
Недавно вышел RC2, затем будет RC3, а затем Stable (примерно через месяц). Первое, о чем хочется сказать: 5.2 медленнее 5.1, но 5.3 быстрее 5.1. В 5.3 введено много оптимизаций (в том числе таблиц связей), и это не может не радовать. Особенных проблем обратной совместимости нет, за исключением введения новых зарезервированных слов и других малозначительных моментов. Подробно они описаны тут — wiki.php.net/doc/scratchpad/upgrade/53 Помимо этого есть много новшеств: 1. mysqlnd. Как известно, PHP общается с MySQL-сервером посредством C-wrapper'а над libmysql, однако реализация имеет огромный оверхед (к примеру, когда Вы делаете mysql_fetch_assoc, результат имеет аж три копии в памяти). MySQL Native Driver представляет собой эффективную замену libmysql на C-уровне. Однако, интерфейсы (mysql, mysqli, PDO) не должны никак от этого пострадать. 2. Closures. Вам надоело видеть create_function() под ободком вашего унитаза? PHP код:
PHP код:
PHP код:
Использовать $this в коде замыкания недопустимо. Это планировалось изначально, но у разработчиков возникли технические проблемы. Однако, можно передать ссылку на объект, используя use, это позволит получит доступ к публичным интерфейсам. Мануал по адресу http://wiki.php.net/rfc/closures 3. namespaces. Пространства имён. PHP код:
Разделитель namespace'ов в пути — обратный слеш (\). Мануал по адресу http://ru.php.net/namespaces 4. Тернарный оператор. Можно использовать без указания true-альтернативы, тогда ей становится само значение. PHP код:
5. Label'ы. Аналог GOTO. Label'ы это именованные позиции в коде к которым можно осуществить переход, разумеется между уровнями переходить нельзя, и для каждого своя область видимости Label'ов. PHP код:
Эх, чешутся пальцы написать обфускатор кода :) 6. Garbage Collector. Наконец-то в PHP появился нормальный сборщик мусора, то есть можно будет писать долгоиграющие скрипты без утечек памяти. 7. SPL. Во-первых: http://www.php.net/~helly/php/ext/spl/ И кроме того, о значимых нововведениях: SplFixedArray, SplStack, SplDoublyLinkedList, SplQueue, SplPriorityQueue. Некоторые новые структуры данных при определенных условиях дают прирост производительности. Посмотреть информацию о классах, интерфейсах и функциях Spl можно в phpinfo() или из командной строки: $ php -i|less $ php -r 'var_export(spl_classes());' $ php --re spl|less 8. Late Static Binding Появился магический метод __callStatic и функция get_called_class(). Это очень полезное нововведение. Помимо этого обновили PCRE до 7.9 (заявлено исправление многих багов), sqlite улучшили, и еще много чего вкусного. Автор:TravisBickle Оригинал статьи: http://habrahabr.ru/blogs/php/59876/ |
| Время: 02:31 |