⊗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 для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць