
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
и запрещены динамические свойства. То есть это небольшой синтаксический сахар для удобства.