Дни идут чередой, погода улучшается, а между тем 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() под ободком вашего унитаза?
Также Вы можете сделать:
Использовать $this в коде замыкания недопустимо. Это планировалось изначально, но у разработчиков возникли технические проблемы.
Однако, можно передать ссылку на объект, используя use, это позволит получит доступ к публичным интерфейсам.
Мануал по адресу wiki.php.net/rfc/closures
3. namespaces. Пространства имён.
Разделитель namespace'ов в пути — обратный слеш (\).
Мануал по адресу php.net/namespaces
4. Тернарный оператор.
Можно использовать без указания true-альтернативы, тогда ей становится само значение.
5. Label'ы. Аналог GOTO.
Label'ы это именованные позиции в коде к которым можно осуществить переход, разумеется между уровнями переходить нельзя, и для каждого своя область видимости Label'ов.
Эх, чешутся пальцы написать обфускатор кода :)
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
Спасибо crocodile2u.
Спасибо Sherman81 за наводку.
8. Late Static Binding
Появился магический метод __callStatic и функция get_called_class().
Это очень полезное нововведение.
Помимо этого обновили PCRE до 7.9 (заявлено исправление многих багов), sqlite улучшили, и еще много чего вкусного.
Наверняка я не учел что-то важное, прошу вежливо ткнуть меня в это носом, допишу.
Предлагаю всем принять участие в тестировании!
Недавно вышел 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() под ободком вашего унитаза?
$lambda = function() {echo 'Hello World!';};
$lambda();
* This source code was highlighted with Source Code Highlighter.
Также Вы можете сделать:
class myLambda
{
public function __invoke() {echo 'Hello World!';}
}
$lambda = new myLambda;
$lambda();
* This source code was highlighted with Source Code Highlighter.
Более, того, можно задействовать переменные из области видимости контекста внутрь функции:$var = 'Hello World!';
$func = function() use ($var) {echo $var;};
$func();
* This source code was highlighted with Source Code Highlighter.
Так очень удобно делать при использовании preg_replace_callback, и при задании событий.Использовать $this в коде замыкания недопустимо. Это планировалось изначально, но у разработчиков возникли технические проблемы.
Однако, можно передать ссылку на объект, используя use, это позволит получит доступ к публичным интерфейсам.
Мануал по адресу wiki.php.net/rfc/closures
3. namespaces. Пространства имён.
namespace hello;
class msg
{
public static function write() {echo 'Hello';}
}
msg::write();
namespace World;
class msg
{
public static function write() {echo ' World!';}
}
msg::write();
* This source code was highlighted with Source Code Highlighter.
Пример специально приведен несуразный. namespace'ы удобно использовать для логического объединения классов, для того чтобы константы не пересекались, и во многих других случаях. Рекомендую к использованию.Разделитель namespace'ов в пути — обратный слеш (\).
Мануал по адресу php.net/namespaces
4. Тернарный оператор.
Можно использовать без указания true-альтернативы, тогда ей становится само значение.
$var = 'Hello World!';
echo $var?:'false';
// Hello World!
* This source code was highlighted with Source Code Highlighter.
Однако, в этом я вижу очень мало практического применения.5. Label'ы. Аналог GOTO.
Label'ы это именованные позиции в коде к которым можно осуществить переход, разумеется между уровнями переходить нельзя, и для каждого своя область видимости Label'ов.
$i = 1;
start:
echo ($i > 1?'-':'').$i;
if ($i++ < 5) {goto start;}
echo ' вышел зайчик погулять';
// 1-2-3-4-5 вышел зайчик погулять
* This source code was highlighted with Source Code Highlighter.
Полезная вещь при создании нетривиальных алгоритмов.Эх, чешутся пальцы написать обфускатор кода :)
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
Спасибо crocodile2u.
Спасибо Sherman81 за наводку.
8. Late Static Binding
Появился магический метод __callStatic и функция get_called_class().
Это очень полезное нововведение.
Помимо этого обновили PCRE до 7.9 (заявлено исправление многих багов), sqlite улучшили, и еще много чего вкусного.
Наверняка я не учел что-то важное, прошу вежливо ткнуть меня в это носом, допишу.
Предлагаю всем принять участие в тестировании!