PHP 8: definice property s otazníkem

PHP 8: definice property s otazníkem
« kdy: 03. 10. 2022, 21:07:52 »
co je v PHP 8 správně v definici třídy? kterého zápisu se vyvarovat a při jakých situacích se liší? Které jsou nesmyslné?

Kód: [Vybrat]
protected int  $varianta1 = 123; // příklad, zde je kladné číslo,
protected ?int  $varianta2 = 123;
protected int $varianta3 ;
protected ?int $varianta4 ;
protected int $varianta5 = null ;
protected ?int $varianta6 = null ;
« Poslední změna: 03. 10. 2022, 21:28:04 od Petr Krčmář »


Re:PHP 8: definice property s otazníkem
« Odpověď #1 kdy: 04. 10. 2022, 10:06:33 »
Ta otázka nedává moc smysl. Pokud čekám, že tam někdy bude null, tak je to ?int. Pokud tam null nikdy nebude, tak je to int. Jestli tu proměnnou inicializuju hned nebo pozdějc na tom moc nemění - to záleží na tom, jestli do ní mám co dát.

$varianta5 je špatně - nemůžeš uložit null do int.

Re:PHP 8: definice property s otazníkem
« Odpověď #2 kdy: 04. 10. 2022, 10:24:44 »
Nelze říct, co je správné, to přece záleží na tom, jak tvoje třída funguje. Stejně tak je na tobě jestli chceš použít unitialized(int) nebo null pro nenastavené hodnoty.

Pokud máš proměnnou int a chceš tam dávat i null, musíš při každém použití si ověřit, co tam vlastně je, to je práce navíc a další místo častých chyb. Za mě bych se vyvaroval použití ?int, pokud to vyloženě není nutné. Pozdější inicializace proměnné je vhodné kontrolovat přes uninitialized(int) a nikoliv přes null.