15
PHP 7: что день грядущий нам готовит? Обзор новинок в PHP 7 Назаренко Д.Н. Senior PHP Developer/Tech Lead. [email protected]

What’s New in PHP7?

Embed Size (px)

Citation preview

Page 1: What’s New in PHP7?

PHP 7: что день грядущий нам готовит? Обзор новинок в PHP 7

Назаренко Д.Н.Senior PHP Developer/Tech Lead.

[email protected]

Page 2: What’s New in PHP7?

Предисловие: PHP5->PHP7, а где же PHP6?

Page 3: What’s New in PHP7?

Обзор нововведений● Производительность;●Группировка объявлений

импорта:

Page 4: What’s New in PHP7?

Обзор нововведенийВместо use Framework\Module\Foo; use Framework\Module\Boo;В PHP7 можно написать:Use Framework\Module\{Foo,Bar}

Page 5: What’s New in PHP7?

Обзор нововведений● Null-коалесцентный операторДо PHP 7:if (isset($foo)) { $bar = $foo;} else {

$bar = 'default'; // присваиваем $bar значение 'default' если $foo равен NULL

}В PHP7:$bar = $foo ?? ‘default’;

Page 6: What’s New in PHP7?

Обзор нововведений● Оператор “космический корабль” <=>

switch ($bar <=> $foo)case 0;echo'$bar и $foo равны’;case -1;echo '$foo больше’;case 1;echo '$bar больше’;}

Page 7: What’s New in PHP7?

Обзор нововведений● Типы скалярных параметров и подсказки (hints) по

возвращаемым типамclass Calculator{// объявляем, что параметры имеют целый тип integer

public function addTwoInts(int $x, int $y): int {// явно объявляем, что метод возвращает целое

return $x + $y;}

}

Page 8: What’s New in PHP7?

Обзор нововведений● исключения движка: С появлением исключений уровня ядра,

фатальные ошибки, которые ранее могли привести к остановке выполнения скрипта, теперь могут быть легко перехвачены и обработаны.Ошибки, такие как вызов несуществующего метода, теперь не остановят скрипт, вместо этого будет сгенерировано исключение, которое можно обработать в блоке try catch, что явно улучшает обработку ошибок в вашем приложении.

До PHP 7 такой код привел бы к фатальной ошибке исполнения скрипта:try {

thisFunctionDoesNotEvenExist(); //Эта Функция Не Существует} catch (\EngineException $e) {

// Подчищаем за собой и записываем информацию об ошибке в лог

echo $e->getMessage();}

Page 9: What’s New in PHP7?

Обзор нововведений● анонимные классы

До PHP 7:class MyClass { public function log($msg) {

print_r($msg . "\n"); }} $pusher->setLogger( new MyClass() ); Использование анонимного класса:$pusher->setLogger(new class { public function log($msg) {

print_r($msg . "\n"); }});

Page 10: What’s New in PHP7?

Обзор нововведений● обновленные генераторы

function genA() {yield 2;yield 3;yield 4;

} function genB() {

yield 1;yield from genA(); // 'genA' вызывается и отрабатывает в этом местеyield 5;return 'success'; // финальный результат, который мы позже можем проверить

}

foreach (genB() as $val) {

echo "\n $val"; // выдаст значения от 1 до 5}

Page 11: What’s New in PHP7?

Обзор нововведений● ожидания (expectations) - улучшение функции assert() с

сохранением обратной совместимости. Они позволяют использовать утверждения с нулевой стоимостью (zero-cost assertions) в рабочем коде и поддерживают возможность генерации пользовательского исключения при возникновении ошибки при отработке утверждения, что может быть полезно во время разработки и тестирования с целью отладки. Функция assert() стала языковой конструкцией в PHP 7.

Page 12: What’s New in PHP7?

Производительность PHP7● в основе ядра PHP7 используется PHPNG. Новое ядро дает

прирост производительности от 40% и более.● бенчмарки PHP 5.6 vs. PHP7 для некоторых фреймворков

Page 13: What’s New in PHP7?

Производительность PHP7● бенчмарки PHP5.6 vs. PHP7 для функций и конструкций

ядра

Page 14: What’s New in PHP7?

Миграция на PHP7Много устаревших функций были удалены:● расширение ereg;● mysql расширение;● модификатор eval для функции preg_replace;● Выражение $foo->$bar['baz']() раньше означало $foo-

>{$bar['baz']}(), сейчас интерпретируется слева-направо: ($foo->$bar)['baz']();

● Конструкторы в стиле PHP 4 теперь считаются устаревшими (deprecated) (т.е. методы конструктора с именем класса).

● утилита PHP 7 Migration Assistant Report (MAR)

Page 15: What’s New in PHP7?

ВыводыСПАСИБО ЗА ВНИМАНИЕ!

До новых встреч!