что было добавлено
(на подходе дженерики, асинхронщина аля Node.js и JIT компиляция)
Hack, PHP-подобный язык программирования общего назначения со статической типизацией, не стал популярным, несмотря на авторов: Facebook
PHP 8
Добавлена поддержка атрибутов (аннотаций)
Добавлена поддержка типов union
public function setNumber(int|float $number): void
Добавлены WeakMap
С WeakMaps ссылки на объекты автоматически собираются сборщиком мусора, когда объект становится недоступен.
$this->cache = new WeakMap();
…
return $this->cache[$obj] ??= $this->computeSomethingExpensive($obj);
Новое исключение ValueError
При определении функций можно использовать вариативный аргумент
public function method(int $many, string $parameters, $here)
extends A {
public function method(…$everything) {
Возвращаемый тип static
public function doWhatever(): static {
return $this;
}
Литерал имени класса для объекта
Теперь можно извлекать имя класса объекта с помощью $object::class. Результат будет такой же, как в случае с get_class($object).
Настройки синтаксиса переменных
New и instanceof теперь можно использовать с произвольными выражениями: new (выражение)(…$args) и $obj instanceof (выражение).
$class = new (collect([‘Foo’, ‘Bar’])->random());
Интерфейс Stringable
В PHP 8 появился новый интерфейс Stringable, который добавляется автоматически, как только класс реализует метод __toString
Трейты могут определять абстрактные приватные методы
trait MyTrait {
abstract private function neededByTheTrait(): string;
throw можно использовать как выражение
Выражение throw теперь можно использовать там, где допускаются только выражения: в стрелочных функциях, coalesce-операторах тернарных условных операторах (ternary/elvis).
$callable = fn() => throw new Exception();
$value = $nullableValue ?? throw new \InvalidArgumentException();
В параметрах списка допускается опциональная висящая запятая
function method_with_many_arguments($a, $b, $c, $d, )
method_with_many_arguments(1, 2, 3, 4,);
Обработка исключений без сохранения в переменной
} catch (\InvalidArgumentException) {
Добавлена поддержка типа mixed
В PHP 8 появился новый тип mixed. Он может быть эквивалентен типам array, bool, callable, int, float, null, object, resource, string.
Добавлена поддержка продвижения свойств конструктора
public function __construct(
public int $id,
public string $name,
) {}
Добавлена поддержка выражения match
Предложено добавить новое выражение match, которое аналогично switch, только с более безопасной семантикой и возможностью возвращать значения.
Добавлена поддержка оператора nullsafe (?->)
$country = $user?->getAddress()?->country?->iso_code;
Добавлена поддержка именованных аргументов
array_fill(start_index: 0, num: 100, value: 50);
https://habr.com/ru/company/mailru/blog/525614/
PHP 7.3
Добавлен новый оператор объединения с null
Объявления скалярных типов
Объявления типов возвращаемых значений
Интерфейс Throwable
Обнуляемые типы
Ничего не возвращающие функции
Синтаксис квадратных скобок для деструктуририрующего присваивания в массиве
Видимость констант класса
PHP 7.2
Новый тип object
function test(object $obj) : object
Разрешено переопределение абстрактных методов
abstract function test(string $s);
extends A
{
abstract function test($s) : int;
Sodium теперь является основным модулем
Добавлено хеширование пароля с помощью Argon2
PHP 7.1
Обнуляемые типы
function answer(): ?int
Ничего не возвращающие функции
function shouldreturnnothing(): void
Псевдотип Iterable
Closure из callable
public static function fromCallable(callable $callable) : Closure
Синтаксис квадратных скобок для деструктуририрующего присваивания в массиве
[$a, $b, $c] = $array;
[“a” => $a, “b” => $b, “c” => $c] = $array;
Видимость констант класса
Перехват нескольких типов исключений
PHP 7.0
Повышение производительности
PHP 7 почти вдвое быстрее, чем PHP 5.6.
Значительное сокращение использования памяти
PHP 7.0 стал громадным шагом вперед с точки зрения производительности и использования памяти. Для страницы с запросами к базе данных версия 7.0.0 более чем в 3 раза быстрее, чем 5.6 с включенным opcache в 2.7 раза быстрее без opcache! С точки зрения использования памяти разница тоже существенная!
https://habr.com/ru/company/otus/blog/524270/
Интерфейс Throwable
Поддержка анонимных классов
Добавлен новый оператор объединения с null – «??»
$x[“a”] ?? $x[“b”] ?? $x[“c”]
Добавлен новый оператор – spaceship (космический корабль) (<=>)
return $a <=> $b; // return ($a < $b) ? -1 : (($a > $b) ? 1 : 0);
Объявления скалярных типов
add(float $a, float $b): float
Объявления типов возвращаемых значений
Добавлена возможность возвращать типы помимо скалярных – классы, включая наследование
Групповые объявления use
Делегация генератора
В теле функций генераторов разрешен следующий новый синтаксис
yield from
Синтаксис кодирования Unicode — “\u{xxxxx}”
Чувствительный к контексту лексер
С этим нововведением глобально зарезервированные слова стали полу-зарезервированными
Выражения return в генераторах
Единый синтаксис переменных https://wiki.php.net/rfc/uniform_variable_syntax