⊗ppOpMgROP 89 of 107 menu

Vetitë Read-Only në OOP në PHP

Le të shqyrtojmë një klasë ku të gjitha vetitë janë private:

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

Tani le t'i bëjmë këto veti në botën e jashtme të disponueshme vetëm për lexim. Më parë kemi bërë diçka të tillë, duke krijuar getters për çdo veti dhe pa krijuar setters.

Tani le ta zgjidhim këtë problem duke përdorur metodën magjike __get. Do të kthejmë në të vlerën e vetisë së kërkuar. Si të bëhet: emri i vetisë së kërkuar shkon në parametrin e metodës __get, në rastin tonë $property.

Kjo do të thotë se mund të lexojmë vetinë, emri i së cilës ruhet në variabël, kështu: $this->$property (emri i vetisë do të jetë i ndryshueshëm, domethënë me dollar në fillim, ne e kemi studiuar këtë në mësimet e mëparshme).

Le të krijojmë metodën e përshkruar __get:

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

Le ta përdorim atë për të lexuar vetitë:

<?php $test = new Test; echo $test->prop1; // do të shfaqë 1 echo $test->prop2; // do të shfaqë 2 ?>

Përpjekja për të shkruar diçka në veti do të çojë në gabim:

<?php $test = new Test; $test->prop1 = 2; // do të japë gabim ?>

Kjo është pikërisht ajo që na nevojitet: vetia mund të lexohet, por nuk mund të shkruhet.

Përpjekja për të lexuar një veti që nuk ekziston do të japë gabim:

<?php $test = new Test; echo $test->prop3; // do të japë gabim ?>

Ju lutemi vini re gjithashtu një nuancë tjetër: kur ne i bëmë vetitë vetëm për lexim me metodën e vjetër, për të lexuar vetinë, ne përdorëm metodën getter.

Në metodën e re ne do të drejtohemi pikërisht te vetitë, sikur ato të jenë publike. Por nuk do të mund të shkruajmë në to, sikur ato të jenë private.

Supozoni se është dhënë klasa User, vetitë e së cilës janë të disponueshme vetëm për lexim me ndihmën e getters:

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

Riktheni kodin e kësaj klase në mënyrë që në vend të getters të përdoret metoda magjike __get.

Shqip
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ne përdorim cookie për funksionimin e sajtit, analizën dhe personalizimin. Përpunimi i të dhënave bëhet në përputhje me Politikën e Privatësisë.
prano të gjitha konfiguro refuzo