⊗ppOpMgROP 89 of 107 menu

Csak olvasható tulajdonságok az OOP-ban PHP-ben

Vizsgáljunk meg egy osztályt, ahol minden tulajdonság privát:

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

Most tegyük úgy, hogy ezek a tulajdonságok a külső világban csak olvashatók legyenek. Korábban már csináltunk ilyet, gettereket készítve minden tulajdonsághoz és nem készítve settereket.

Most oldjuk meg ezt a feladatot a varázsmetódus __get segítségével. Ebben fogjuk visszaadni a kért tulajdonság értékét. Hogyan tegyük: a kért tulajdonság neve a metódus __get paraméterébe kerül, esetünkben a $property-be.

Ez azt jelenti, hogy elolvashatjuk a tulajdonságot, amelynek neve egy változóban tárolódik, így: $this->$property (a tulajdonság neve változó lesz, vagyis dollárjellel az elején, ezt átvettük a korábbi leckékben).

Készítsük el az említett __get metódust:

<?php class Test { private $prop1 = 1; private $prop2 = 2; public function __get($property) { return $this->$property; } } ?>

Használjuk fel tulajdonságok olvasására:

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

Ha megpróbálunk valamit beírni a tulajdonságba, az hibához vezet:

<?php $test = new Test; $test->prop1 = 2; // hibát jelez ?>

Pontosan erre van szükségünk: a tulajdonság olvasható, de nem írható.

Ha nem létező tulajdonságot próbálunk elolvasni, az hibát jelez:

<?php $test = new Test; echo $test->prop3; // hibát jelez ?>

Figyeljünk a következő árnyalatra is: amikor a régi módszerrel készítettük a csak olvasható tulajdonságokat, akkor a tulajdonság olvasásához getter metódust használtunk.

Az új módszerben mi maguk a tulajdonságokhoz fognak hozzáférni, mintha publikusak lennének. De beleírni nem tudunk, mintha privátok lennének.

Legyen adott a következő User osztály, amelynek tulajdonságai csak olvashatók getterek segítségével:

<?php class User { private $name; private $age; public function __construct($name, $age) { $this->name = $name; $this->age = $age; } public function getName() { return $this->name; } public function getAge() { return $this->age; } } ?>

Alakítsa át az osztály kódját úgy, hogy a getterek helyett a varázsmetódus __get kerüljön felhasználá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