⊗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ščinaShqipСрпскиSrpskiSvenskaKiswahiliไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Мо барои коркарди сомона, таҳлил ва шахсӣ кардан аз cookie истифода мебарем. Коркарди маълумот мувофиқи Сиёсати махфият сурат мегирад.
ҳамаро қабул кардан танзим кардан рад кардан