⊗ppOpMgROP 89 of 107 menu

Tik skaitomos savybės OOP PHP

Panagrinėkime klasę, kurioje visos savybės yra privatūs:

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

Dabar padarykime taip, kad šios savybės išoriniame pasaulyje būtų prieinamos tik skaitymui. Anksčiau mes tai jau darėme, kurdami getter'ius kiekvienai savybei ir nekurdami setter'ių.

Dabar šiai problemai išspręsti pasinaudokime magiškuoju metodu __get. Grąžinsime jame užklaustos savybės reikšmę. Kaip tai padaryti: užklaustos savybės pavadinimas patekia į metodo __get parametrą, mūsų atveju $property.

Tai reiškia, kad galime perskaityti savybę, kurios pavadinimas saugomas kintamajame, štai taip: $this->$property (savybės pavadinimas bus kintamasis, tai yra su dolerio ženklu pradžioje, mes tai mokėmės ankstesnėse pamokose).

Sukurkime aprašytą metodą __get:

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

Panaudokime jį savybių skaitymui:

<?php $test = new Test; echo $test->prop1; // išves 1 echo $test->prop2; // išves 2 ?>

Bandymas ką nors įrašyti į savybę sukels klaidą:

<?php $test = new Test; $test->prop1 = 2; // išmes klaidą ?>

Tai būtent tai, ko mums reikia: savybę galima perskaityti, bet negalima įrašyti.

Bandymas perskaityti neegzistuojančią savybę išmes klaidą:

<?php $test = new Test; echo $test->prop3; // išmes klaidą ?>

Taip pat atkreipkite dėmesį į šį niuansą: kai mes darydavome savybes tik skaitymui senuoju būdu, norėdami perskaityti savybę, naudodavome metodo-getter'į.

Naujajame būde mes kreipsimės būtent į savybes, tarsi jos būtų viešos. Bet įrašyti į jas negalėsime, tarsi jos būtų privatūs.

Tegu duota štai tokia klasė User, kurios savybės yra prieinamos tik skaitymui naudojant getter'ius:

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

Pertvarkykite šios klasės kodą taip, kad vietoj getter'ių būtų naudojamas magiškas metodas __get.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti