⊗ppOpMgROP 89 of 107 menu

Read-only Properties in OOP in PHP

Hajde da razmotrimo klas u kome su sva svojstva privatna:

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

Sada učinimo da ova svojstva u spoljašnjem svetu budu dostupna samo za čitanje. Ranije smo već to radili, kreirajući getere za svako svojstvo i ne kreirajući setere.

Hajde sada da za rešavanje ovog zadatka iskoristimo magičnu metodu __get. Vraćaćemo u njoj vrednost traženog svojstva. Kako to uraditi: ime traženog svojstva dolazi u parametar metode __get, u našem slučaju $property.

To znači da možemo pročitati svojstvo, čije ime se čuva u promenljivoj, ovako: $this->$property (ime svojstva će biti promenljivo, odnosno sa dolarom na početku, mi smo to prošli u prethodnim lekcijama).

Hajde da napravimo opisanu metodu __get:

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

Iskoristimo je za čitanje svojstava:

<?php $test = new Test; echo $test->prop1; // ispisaće 1 echo $test->prop2; // ispisaće 2 ?>

Pokušaj da se nešto upiše u svojstvo dovest će do greške:

<?php $test = new Test; $test->prop1 = 2; // ispisaće grešku ?>

To je upravo ono što nam je potrebno: svojstvo se može čitati, ali se ne može upisivati.

Pokušaj čitanja nepostojećeg svojstva ispisaće grešku:

<?php $test = new Test; echo $test->prop3; // ispisaće grešku ?>

Obratite takođe pažnju na sledeću nijansu: kada smo pravili svojstva samo za čitanje starim načinom, onda smo da bismo pročitali svojstvo, koristili metodu-geter.

U novom načinu mi ćemo se obraćati upravo svojstvima, kao da su javna. Ali upisati u njih nećemo moći, kao da su privatna.

Neka je dat evo takav klas User, čija svojstva su dostupna samo za čitanje uz pomoć getera:

<?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; } } ?>

Preoblikujte kod ovog klasa tako da umesto getera bude korišćena magična metoda __get.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij