Od jaké verze funguje operátor in a řetězení s undefined-safe operátorem?
- Kcko
- Člen | 468
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 | 1275
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 | 468
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 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řesReflectionProperty->isInitialized()
)
Bavíme se o tomhle? https://latte.nette.org/cs/syntax#…
Mělo by to fungovat stejně jako v JS ne?