⊗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šuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј