⊗ppOpMgSP 91 of 107 menu

Писање својстава кроз магију у ООП у PHP

Магични метод __set позива се при покушају промене вредности непостојећег или скривеног својства. Као параметре прима име својства и вредност, коју му покушавају доделити.

Погледајмо на практичном примеру. Нека нам је дат овакав класс Test:

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

Направимо у овом класу магични метод __set, који ће уз помоћ функције var_dump исписивати име својства, коме се дошло до приступа, и вредност, коју том својству покушавају поставити:

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

Проверимо рад нашег класа:

<?php $test = new Test; $test->prop = 'value'; // var_dump метода __set исписаће 'prop value' ?>

Хајде сада да постављамо вредност својству, чије се име чува у променљивој $property:

<?php class Test { private $prop1; private $prop2; public function __set($property, $value) { $this->$property = $value; // постављамо вредност } } ?>

Сада можемо да уписујемо у приватна својства споља класа:

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

Упис можемо, међутим, проверити, да ли се тамо нешто уписало - не, јер су својства приватна.

Може се направити гетер за та својства или једноставно искористити магични метод __get. Искористимо другу опцију:

<?php class Test { private $prop1; private $prop2; public function __set($property, $value) { $this->$property = $value; } // Магични гетер својстава: public function __get($property) { return $this->$property; } } ?>

Е сада можемо да проверимо рад нашег класа. Проверимо:

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

У ствари, наравно, не треба дозвољавати свима да уписују у приватна својства, иначе нестаје поента тих приватних својстава (једноставније је да се направе јавним и то је то).

Зато овај метод треба примењивати само онда када за то заиста постоји потреба. У следећим лекцијама ћемо још размотрити примере успешне примене.

Српски
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
Користимо колачиће за рад сајта, аналитику и персонализацију. Обрада података се врши у складу са Политиком приватности.
прихвати све подеси одбиј