
A PHP a november 21-én bemutatandó release-ében bevezeti a típusos változót az osztályokon belül. Hatalmas előrelépés, innentől kezdve az IDE compiler hibajelzései runtime hibaként is visszaköszönnek, és a PHP is utoléri a típusos programnyelveket …
Az ITNEXT-en Italo Baeza szerint ez ahhoz vezet, hogy nem lesz szükség a getterekre és szetterek – eddig ugyanis a metódusokon keresztül tudtad csak kikényszeríteni, hogy egy adott visszatérő érték típusos legyen.
A jelenlegi PHP verzió szerint az alábbi kódot kellene írni ahhoz, hogy biztosítani tudjuk, hogy a MotherBoard osztály $processor változója Processor osztály típusú, és hogy azonnal el tudjuk érni a benne deklarált metódusokat/változóat.
<?php class MotherBoard { protected $processor; public function getProcessor() : Processor { return $this->processor; } public function setProcessor(Processor $processor) { $this->processor = $processor; } [...] $mb = new MotherBoard(new AMD(12)); $mb->getProcessor()->getCoreCount();
Ezzel szemben az „új” PHP-ban a kód jóval rövideb, ki lehet dobni 2×3 sor getter/settert, és úgy is működik.
<?php class MotherBoard { public Processor $processor; [...] $mb = new MotherBoard; $mb->processor = new AMDProc; $mb->processor->corecount = 12;
Igaz, van egy „apró” kis probléma az interfészekkel, ugyanis a PHP Interface objektum NEM engedi, hogy bármilyen változót deklarálj. Azaz ha a közös ős egy interface, akkor annak deklarálásához, hogy létezik egy adott változó, továbbra is kell gettereket és szettereket használni. Ha ugyanis nem használsz, akkor elképzelhető, hogy úgy definiálsz egy osztályt, hogy kifelejted belőle a változót, és a program futás közben csúnyán pofára esik.
Ennél sokkal nagyobb probléma van a változó elérhetőségével.
A setterek és getterek nem kizárólag egy változónak adnak értéket, hanem ezeket az értékeket ellenőrzik, hibákat kezelnek stb, valamint behatárolják, hogy egy érték mikor és hogyan érhető el.
A fenti, klasszikus példában a Processor CoreCount-ját csak és kizárólag a Processor osztály inicializálásánal lehet beállítani, utána az érték csak olvashatóvá válik (ha nincs a setCoreCount implementálva). Az új, típusos verziónál viszont bármikor felülírhatjuk az értéket, ami teljes nonsense, és melegágya az ellenőrizhetetlen és hibás kódnak.
De ha azt vesszük, hogy az alaplapunkat összekötöttük a processzorral, akkor egy processzorcserének is vannak előfeltételei (pl. áramtalanított gép, meglévő proci stb), nem csak úgy hozzávágjuk az alaplaphoz az új procit, aztán vagy van, vagy nincs, vagy jó, vagy nem jó…
Vérnyomásemelőnek mindenesetre remek cikk volt, lehet kávé helyett inkább ezt a cikket kellene olvasgatnom rendszeresen 😉
Ti mennyi publikus változót használtok egy ojjektumban?