Пхп местами странноватый язык который странновато эволюционирует.
$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