This presentation is about PHP7, its innovations’ overview with practical examples. You will learn how to move to PHP7 and see performance сomparison between PHP 5.6 and PHP7.
This presentation by Dmytro Nazarenko (Senior PHP Developer / Tech Lead) was delivered at GlobalLogic Kharkiv PHP Meetup #1 on September 14, 2016.
4. Обзор нововведений
Вместо use FrameworkModuleFoo;
use FrameworkModuleBoo;
В PHP7 можно написать:
Use FrameworkModule{Foo,Bar}
5. Обзор нововведений
● Null-коалесцентный оператор
До PHP 7:
if (isset($foo)) {
$bar = $foo;
} else {
$bar = 'default'; // присваиваем $bar значение 'default' если $foo равен
NULL
}
В PHP7:
$bar = $foo ?? ‘default’;
6. Обзор нововведений
● Оператор “космический корабль”
<=>
switch ($bar <=> $foo)
case 0;
echo'$bar и $foo равны’;
case -1;
echo '$foo больше’;
case 1;
echo '$bar больше’;
}
7. Обзор нововведений
● Типы скалярных параметров и подсказки (hints) по
возвращаемым типам
class Calculator
{
// объявляем, что параметры имеют целый тип integer
public function addTwoInts(int $x, int $y): int {
// явно объявляем, что метод возвращает целое
return $x + $y;
}
}
8. Обзор нововведений
● исключения движка: С появлением исключений уровня ядра,
фатальные ошибки, которые ранее могли привести к
остановке выполнения скрипта, теперь могут быть легко
перехвачены и обработаны.Ошибки, такие как вызов
несуществующего метода, теперь не остановят скрипт,
вместо этого будет сгенерировано исключение, которое
можно обработать в блоке try catch, что явно улучшает
обработку ошибок в вашем приложении.
До PHP 7 такой код привел бы к фатальной ошибке исполнения скрипта:
try {
thisFunctionDoesNotEvenExist(); //Эта Функция Не Существует
} catch (EngineException $e) {
// Подчищаем за собой и записываем информацию об ошибке в лог
echo $e->getMessage();
}
9. Обзор нововведений
● анонимные классы
До 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");
}
});
10. Обзор нововведений
● обновленные генераторы
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
}
11. Обзор нововведений
● ожидания (expectations) - улучшение функции assert() с
сохранением обратной совместимости. Они позволяют
использовать утверждения с нулевой стоимостью (zero-
cost assertions) в рабочем коде и поддерживают
возможность генерации пользовательского исключения при
возникновении ошибки при отработке утверждения, что
может быть полезно во время разработки и тестирования с
целью отладки. Функция assert() стала языковой
конструкцией в PHP 7.
12. Производительность PHP7
● в основе ядра PHP7 используется PHPNG. Новое ядро дает
прирост производительности от 40% и более.
● бенчмарки PHP 5.6 vs. PHP7 для некоторых фреймворков
14. Миграция на PHP7
Много устаревших функций были удалены:
● расширение ereg;
● mysql расширение;
● модификатор eval для функции preg_replace;
● Выражение $foo->$bar['baz']() раньше означало $foo-
>{$bar['baz']}(), сейчас интерпретируется слева-
направо: ($foo->$bar)['baz']();
● Конструкторы в стиле PHP 4 теперь считаются устаревшими
(deprecated) (т.е. методы конструктора с именем
класса).
● утилита PHP 7 Migration Assistant Report (MAR)