⊗ppOpMgSP 91 of 107 menu

Tulajdonságok írása mágiával az OOP-ban PHP-ben

A __set mágikus metódus akkor hívódik meg, amikor egy nem létező vagy rejtett tulajdonság értékének módosítására tesznek kísérletet. Paraméterként átveszi a tulajdonság nevét és az értéket, amit hozzá próbálnak rendelni.

Nézzünk egy gyakorlati példát. Tegyük fel, hogy adott a következő Test osztály:

<?php class Test { private $prop1; private $prop2; } ?>

Készítsük el ebben az osztályban a __set mágikus metódust, amely a var_dump függvény segítségével kiírja a tulajdonság nevét, amelyhez hozzáférés történt, és az értéket, amit a tulajdonsághoz próbáltak beállítani:

<?php class Test { private $prop1; private $prop2; public function __set($property, $value) { var_dump($property . ' ' .$value); } } ?>

Vizsgáljuk meg az osztályunk működését:

<?php $test = new Test; $test->prop = 'érték'; // a __set metódus var_dump-ja kiírja 'prop érték' ?>

Most pedig állítsuk be az értéket annak a tulajdonságnak, amelynek neve a $property változóban tárolódik:

<?php class Test { private $prop1; private $prop2; public function __set($property, $value) { $this->$property = $value; // beállítjuk az értéket } } ?>

Mostantól képesek leszünk írni a privát tulajdonságokba az osztályon kívülről:

<?php $test = new Test; $test->prop1 = 1; // írjuk be az 1-et $test->prop2 = 2; // írjuk be a 2-t ?>

Írni tudunk, azonban azt, hogy valóban beírtunk-e oda valamit, nem tudjuk ellenőrizni, mivel a tulajdonságok privátak.

Készíthetünk getter metódust ezekhez a tulajdonságokhoz, vagy egyszerűen használhatjuk a __get mágikus metódust. Használjuk a második lehetőséget:

<?php class Test { private $prop1; private $prop2; public function __set($property, $value) { $this->$property = $value; } // Mágikus getter tulajdonságokhoz: public function __get($property) { return $this->$property; } } ?>

Most már ellenőrizhetjük az osztályunk működését. Ellenőrizzük:

<?php $test = new Test; $test->prop1 = 1; // írjuk be az 1-et $test->prop2 = 2; // írjuk be a 2-t echo $test->prop1; // kiírja 1-et echo $test->prop2; // kiírja 2-t ?>

Valójában természetesen nem szabad mindenki számára engedélyezni a privát tulajdonságokba való írást, különben elveszik ezeknek a privát tulajdonságoknak a lényege (egyszerűbb volna nyilvánossá tenni őket és kész).

Ezért ezt a metódust csak akkor érdemes alkalmazni, amikor erre valóban szükség van. A következő leckékben további példákat is megvizsgálunk a sikeres alkalmazásra.

Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás