What’s New in PHP7?
-
Upload
globallogic-ukraine -
Category
Software
-
view
481 -
download
0
Transcript of What’s New in PHP7?
PHP 7: что день грядущий нам готовит? Обзор новинок в PHP 7
Назаренко Д.Н.Senior PHP Developer/Tech Lead.
Предисловие: PHP5->PHP7, а где же PHP6?
Обзор нововведений● Производительность;●Группировка объявлений
импорта:
Обзор нововведенийВместо use Framework\Module\Foo; use Framework\Module\Boo;В PHP7 можно написать:Use Framework\Module\{Foo,Bar}
Обзор нововведений● Null-коалесцентный операторДо PHP 7:if (isset($foo)) { $bar = $foo;} else {
$bar = 'default'; // присваиваем $bar значение 'default' если $foo равен NULL
}В PHP7:$bar = $foo ?? ‘default’;
Обзор нововведений● Оператор “космический корабль” <=>
switch ($bar <=> $foo)case 0;echo'$bar и $foo равны’;case -1;echo '$foo больше’;case 1;echo '$bar больше’;}
Обзор нововведений● Типы скалярных параметров и подсказки (hints) по
возвращаемым типамclass Calculator{// объявляем, что параметры имеют целый тип integer
public function addTwoInts(int $x, int $y): int {// явно объявляем, что метод возвращает целое
return $x + $y;}
}
Обзор нововведений● исключения движка: С появлением исключений уровня ядра,
фатальные ошибки, которые ранее могли привести к остановке выполнения скрипта, теперь могут быть легко перехвачены и обработаны.Ошибки, такие как вызов несуществующего метода, теперь не остановят скрипт, вместо этого будет сгенерировано исключение, которое можно обработать в блоке try catch, что явно улучшает обработку ошибок в вашем приложении.
До PHP 7 такой код привел бы к фатальной ошибке исполнения скрипта:try {
thisFunctionDoesNotEvenExist(); //Эта Функция Не Существует} catch (\EngineException $e) {
// Подчищаем за собой и записываем информацию об ошибке в лог
echo $e->getMessage();}
Обзор нововведений● анонимные классы
До 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"); }});
Обзор нововведений● обновленные генераторы
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}
Обзор нововведений● ожидания (expectations) - улучшение функции assert() с
сохранением обратной совместимости. Они позволяют использовать утверждения с нулевой стоимостью (zero-cost assertions) в рабочем коде и поддерживают возможность генерации пользовательского исключения при возникновении ошибки при отработке утверждения, что может быть полезно во время разработки и тестирования с целью отладки. Функция assert() стала языковой конструкцией в PHP 7.
Производительность PHP7● в основе ядра PHP7 используется PHPNG. Новое ядро дает
прирост производительности от 40% и более.● бенчмарки PHP 5.6 vs. PHP7 для некоторых фреймворков
Производительность PHP7● бенчмарки PHP5.6 vs. 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)
ВыводыСПАСИБО ЗА ВНИМАНИЕ!
До новых встреч!