Property Hooks a asymetrické v PHP 8.4 – dočká se jich Nette?
- David Grudl
- Nette Core | 8253
Na blogu jsem publikoval hodně obsáhlý článek o novinkách v PHP 8.4, konkrétně o property hooks a asymetrické viditelnosti. Jde o opravdu zásadní změny v objektově orientovaném programování v PHP, které by mohly výrazně ovlivnit náš přístup k návrhu tříd.
Článek zmiňuje i to, že začlenit properties do zajetých projektů, které používají settery a gettery, vytváří dilema. Jak vidíte možnosti začlenění properties do Nette? Kde by mohly property přinést zjednodušení našeho kódu?
- m.brecher
- Generous Backer | 889
Ahoj,
v repozitáři nette/application jsem zaznamenal @property-deprecated u třídy Presenter
Anotace aktuální verze:
anotace na Githubu:
Zřejmě se plánuje před přechodem Nette na PHP 8.4 varovat před použitím magických public properties, které se s přechodem Nette na PHP 8.4 odstraněním traity SmartObject znefunkční. Nasadit property hooks do frameworku je dilema a mělo by být komunitou diskutováno. Já property hooks používám v presenterech tímto způsobem:
V třídě AbstractPresenter přepíšu privátní property na public property pomocí property hooks a tím vyřadím z činnosti magické __get() které používá traita SmartObject. Pokud se traita SmartObject z frameworku jednou odstraní a properties třídy Presenter zůstanou privátní, tyto definice property hooks budou fungovat bez problémů dál.
Jak by se měly property hooks implementovat v budoucí verzi Presenter class? Určitě by se měly zachovat gettery, vývojáři properties moc nepoužívají, přepisovat staré projekty nedává smysl.
Jak naložit s magickými public properties? Označit je @property-deprecated a později úplně odstranit a kdo chce tak si public properties definuje pomocí property hooks sám v abstraktním předku, nebo je implementovat již do samotného frameworku ??
PHP 8.4 otevírá nové možnosti, pojďme je využít a diskutujme o nejlepším způsobu definice public properties ;)
Editoval m.brecher (21. 3. 1:51)