
Size: a a a






readonly должны быть типизированные, но можно использовать тип mixed.readonly свойство инициализировано объектом, то иммутабельным он не становится. То есть его внутреннее состояние все еще можно изменить.

$fn = Closure::fromCallable('strlen');
Или так:$fn = fn(...$args) => strlen(...$args);Стало:
$fn = strlen(...);Новый синтаксис можно будет применять везде, где ожидается
callable. Он лаконичнее и доступен для статического анализа.




$this в качестве тайпхинта для возвращаемых значений, и про удаление старых видов колбэков.




class User {
public $name;
}
$user = new User;
// Assigns declared property User::$name.
$user->name = «foo»;
// Oops, a typo:
$user->nane = «foo»;
// PHP <= 8.1: Молча создает динамическое свойство $user->nane.
// PHP 8.2: Вызывает предупреждение, но все равно создает динамическое свойство.
// PHP 9.0: Выбрасывает исключение Error.
Это изменение не будет касаться класса stdClass и унаследованных от него. А также не касается классов с магическими __get/__set.#[AllowDynamicProperties]. Его можно навесить на любой класс и в этом классе продолжат работать динамические свойства.


new в инициализаторах (и вложенные атрибуты);🔹 final константы в классах;never для (не)возвращаемых значений;0o;... поддерживает массивы со строковыми ключами;float в int, где теряется дробная часть;Serializable объявлен устаревшим;$GLOBALS;null в параметры встроенных функций, которые не nullable;#[ReturnTypeWillChange]);finfo, IMAP\Connection, FTP\Connection, PgSql\Connection, PgSql\Result.
Enums они же перечисления;Readonly свойства;new в инициализаторах (и вложенные атрибуты);final константы в классах;never для (не)возвращаемых значений;0o;... поддерживает массивы со строковыми ключами;readonly и запрещены динамические свойства. То есть это небольшой синтаксический сахар для удобства.