Od jaké verze funguje operátor in a řetězení s undefined-safe operátorem?

- Kcko
- Člen | 473
Ahoj,
přečetl jsem si po nějaké době vstupní stránku o Latte se syntaktickým
cukrem a chtěl jsem si vyzkoušet
řetězení s undefined-safe operátorem
https://blog.nette.org/…epsi-nakonec
<?php
{var $x = new \DateTime()}
{$x??->prop??->elem[1]??->call()}
?>
Nespadne, fajn.
<?php
{var $x = new \DateTime()}
{$x??->prop}
?>
Spadne na Undefined property: DateTime::$prop, proč?
A od jaké verze funguje operátor in? Nikde nevidím a možná to v dokumentaci bylo dříve (nebo v jiných sekcích) od jaké verze daného balíčku daná funkcionalita fungovala.
Mám Latte 2.10.9
Díky za info.
Editoval Kcko (27. 7. 2023 11:14)

- Marek Bartoš
- Nette Blogger | 1313
Undefined-safe a null-safe operátory jsou určené pro volání na neexistujících/null hodnotách. Ne pro volání neexistujících hodnot.
var_dump((null)?->foo()); // vypíše null
Pro neexistující hodnoty se dá použít isset(). Nerozlišuje
ale mezi undefined/unintialized/null
$dt = new DateTime;
var_dump(isset($dt->prop)); // vypíše false
Nebo ReflectionProperty (pro undefined vyhodí výjimku při
vytvoření, uninitialized se rozliší přes
ReflectionProperty->isInitialized())
Editoval Marek Bartoš (27. 7. 2023 12:45)

- Kcko
- Člen | 473
Marek Bartoš napsal(a):
Undefined-safe a null-safe operátory jsou určené pro volání na neexistujících/null hodnotách. Ne pro volání neexistujících hodnot.
var_dump((null)?->foo()); // vypíše nullPro neexistující hodnoty se dá použít
isset(). Nerozlišuje ale mezi undefined/unintialized/null$dt = new DateTime; var_dump(isset($dt->prop)); // vypíše falseNebo
ReflectionProperty(pro undefined vyhodí výjimku při vytvoření, uninitialized se rozliší přesReflectionProperty->isInitialized())
Bavíme se o tomhle? https://latte.nette.org/cs/syntax#…
Mělo by to fungovat stejně jako v JS ne?