Что нового в PHP 8.2
- Release: https://www.php.net/releases/8.2/ru.php
- Wiki: PHP 8.2
- 8.1>8.2 Mirgation: https://www.php.net/manual/ru/migration82.new-features.php
- github: Список изменений PHP 8.2
- habr: https://habr.com/ru/company/hexlet/blog/705194/
null, false, true ― cамостоятельные типы
Wiki: https://wiki.php.net/rfc/null-false-standalone-types
Wiki: https://wiki.php.net/rfc/true-type
class Falsy
{
public function alwaysFalse(): false { /* ... */ *}
public function alwaysTrue(): true { /* ... */ *}
public function alwaysNull(): null { /* ... */ *}
}
Динамические свойства класса запрещены
Doc: https://www.php.net/manual/ru/migration82.deprecated.php#migration82.deprecated.core.dynamic-properties
Wiki: https://wiki.php.net/rfc/deprecate_dynamic_properties
Чтобы помочь избежать ошибок и опечаток, больше не рекомендуется определять динамические свойства.
Используйте атрибут #[\AllowDynamicProperties] для класса, когда необходимо разрешить динамические свойства.
В экземплярах stdClass динамические свойства по прежнему разрешены.
class User {
public $name;
}
$user = new User();
$user->last_name = 'Doe'; // Deprecated notice
$user = new stdClass();
$user->last_name = 'Doe'; // Разрешено
Это изменение не влияет на использование магических методов __get()/__set().
Константы в трейтах
Doc: https://www.php.net/manual/ru/migration82.new-features.php#migration82.new-features.core.constant-in-traits
Wiki: https://wiki.php.net/rfc/constants_in_traits
Нельзя получить доступ к константе через имя трейта, но можно через класс, который использует этот трейт:
trait Foo {
public const CONSTANT = 1;
}
class Bar {
use Foo;
}
var_dump( Bar::CONSTANT ); // 1
var_dump( Foo::CONSTANT ); // Error—