Nefunkční chaining v Latte 2.10.4

Kcko
Člen | 468
+
0
-

Ahoj,
zaktualizoval jsem Nette 2.4 protože jsem si po delší době chtěl vyzkoušet novější Latte věci dle https://blog.nette.org/…astni-funkce a dalších článků v blogu.

V composer.locku mi svítí verze Latte 2.10.4.
Verze PHP 7.1

Už tohle mi spadne na Notice „undefined variable $order“

<?php
{$order?->id}
?>

Můj composer.json

<?php

{
    "config": {
        "platform": {
            "php": "7.1"
        }
    },
    "require": {
        "nette/nette": "2.4.*",
        "kdyby/events": "3.1.*",
        "erusev/parsedown": "^1.7",
        "aleswita/visualpaginator": "1.0",
        "dg/twitter-php": "3.x",
        "aleswita/formrenderer": "^1.3"
    }
}
?>

Co dělám špatně?

Polki
Člen | 553
+
0
-

Nejspíš nic :D
Mě to včera zaskočilo taky :D

Přišlo mi to srandovní, že to tam David přidal, jelikož chtěl udělat novinku v Latte, pak byl překvapený, že to je přidáno nativně do PHP a najednou to v PHP, kde to má fungovat v Latte nefunguje.
Docela paradoxní sranda.

Kcko
Člen | 468
+
0
-

Polki napsal(a):

Nejspíš nic :D
Mě to včera zaskočilo taky :D

Přišlo mi to srandovní, že to tam David přidal, jelikož chtěl udělat novinku v Latte, pak byl překvapený, že to je přidáno nativně do PHP a najednou to v PHP, kde to má fungovat v Latte nefunguje.
Docela paradoxní sranda.

Čau,
null-safe operátor je, ale až od PHP 8 ne?

Já mám 7.1 takže tam by se to mělo chovat dle Latte, ale neděje se tak.

Ale třeba makro {trace} mi funguje, které bylo až v Latte 2.10, takže to mám snad vše nainstalováno správně.

Editoval Kcko (15. 10. 2021 23:11)

Polki
Člen | 553
+
0
-

Kcko napsal(a):

Polki napsal(a):

Nejspíš nic :D
Mě to včera zaskočilo taky :D

Přišlo mi to srandovní, že to tam David přidal, jelikož chtěl udělat novinku v Latte, pak byl překvapený, že to je přidáno nativně do PHP a najednou to v PHP, kde to má fungovat v Latte nefunguje.
Docela paradoxní sranda.

Čau,
null-safe operátor je, ale až od PHP 8 ne?

Já mám 7.1 takže tam by se to mělo chovat dle Latte, ale neděje se tak.

Ale třeba makro {trace} mi funguje, které bylo až v Latte 2.10, takže to mám snad vše nainstalováno správně.

Jo, to máš pravdu. Zajímavý ale je, že mi to dělá ten stejnej problém jako tobě Latte2.10.3 a PHP8.0.6
Tak jsem to vyřešil prostě tak, že jsem to nepoužil…

EDIT1 : Našel jsem info, že by to mělo v nejnovějším Latte fungovat takto:

{$variable??->result}

https://blog.nette.org/…epsi-nakonec#…

Editoval Polki (16. 10. 2021 6:08)

Kcko
Člen | 468
+
+1
-

Tady to je popsáno trošku jinak https://latte.nette.org/cs/syntax#… a je to IMHO zavádějící, ale se 2 otazníky se to chová konečně normálně.

Třeba se k tomu jetě vyjádří někdo povolanější nebo se to opraví v dokumentaci a případně i na blogu.

:)

David Grudl
Nette Core | 8218
+
0
-

Co presne je v dokumentaci spatne?

Marek Bartoš
Nette Blogger | 1263
+
+2
-

Imho jen změnit toto, jinak null-safe a undefined-safe vypadají okay
můžete používat optional chaining $var?->call()?->elem[1]?->item ->
můžete používat optional chaining $var??->call()??->elem[1]??->item

{$order->item?->name} // znamená isset($order->item) ? $order->item->name : null->
{$order->item??->name} // znamená isset($order->item) ? $order->item->name : null

Editoval Marek Bartoš (17. 10. 2021 13:20)

Martk
Člen | 661
+
+1
-

@DavidGrudl Asi toto https://ctrlv.cz/…/17/aUTZ.png , problém je ten, že je napsané že se to chová jako isset, přitom to není pravda.

Editoval Martk (17. 10. 2021 14:45)

David Grudl
Nette Core | 8218
+
0
-

Aha, aha. Pošlete prosím PR.