Пхп местами странноватый язык который странновато эволюционирует.
$a = new class { public readonly object $b; public readonly object $c; public function __construct() { $this->b = new class { public function helloworld() { return 'hello world'; } }; } };
Вот если у нас есть объект в котором есть 2 проперти, одно из которых инициализировано, а другое нет.
С инициализированным проперти всё просто и понятно:
echo $a->b?->helloworld(); // hello world
А вот если вы так же сделаете для неинициализированного то оно умрёт:
echo $a->c?->helloworld(); // Typed property class@anonymous::$c must not be accessed before initialization
Неудобно когда умирает поэтому приходится делать дополнительную проверку:
if (isset($a->c)) { echo echo $a->c->helloworld(); }
Ещё более неудобно когда хочешь проверить есть ли какой-то объект и проверить что-то в этом объекте, то начинается…
if (isset($a->c) && $a->c->isValid()) { return true; }
По непонятно причине ?->
умирает если оно неиницилизовано и не заменяет isset()
, а вот ??
не умирает и вполне себе живёт и заменяет isset()
поэтому…
echo ($a->c ?? null)?->helloworld(); if (($a->c ?? null)?->isValid()) { return true; }
Какой же ад, нравится!
2024.12.10 18:01