⊗ppOpMgROP 89 of 107 menu

Својства само за читање у ООП у PHP

Хајде да размотримо класу у којој су сва својства приватна:

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

Сада ћемо учинити да ова својства у спољном свету буду доступна само за читање. Раније смо то већ радили, креирајући геттере за свако својство и не креирајући сеттере.

Хајде сада да искористимо магични метод __get за решавање овог задатка. Вратићемо у њему вредност траженог својства. Како то урадити: име траженог својства се налази у параметру методе __get, у нашем случају $property.

То значи да можемо прочитати својство, чије се име чува у променљивој, овако: $this->$property (име својства ће бити променљива, то јест са доларом на почетку, то смо учинили у претходним лекцијама).

Хајде да направимо описану методу __get:

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

Искористићемо је за читање својстава:

<?php $test = new Test; echo $test->prop1; // исписаће 1 echo $test->prop2; // исписаће 2 ?>

Покушај да се нешто уписује у својство довешће до грешке:

<?php $test = new Test; $test->prop1 = 2; // даће грешку ?>

То је управо оно што нам треба: својство се може читати, али не може се уписовати.

Покушај да се прочита непостојеће својство даће грешку:

<?php $test = new Test; echo $test->prop3; // даће грешку ?>

Обратите такође пажњу на следећи детаљ: када смо правили својства само за читање старим начином, да би прочитали својство, користили смо метод-гетер.

У новом начину, обраћаћемо се управо својствима, као да су јавна. Али нећемо моћи да уписујемо у њих, као да су приватна.

Нека је дата оваква класа User, чија својства су доступна само за читање помоћу гетера:

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

Промените код ове класе тако да уместо гетера користи магични метод __get.

Српски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Користимо колачиће за рад сајта, аналитику и персонализацију. Обрада података се врши у складу са Политиком приватности.
прихвати све подеси одбиј