⊗ppOpMgROP 89 of 107 menu

Właściwości tylko do odczytu w OOP w PHP

Rozważmy klasę, w której wszystkie właściwości są prywatne:

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

Teraz sprawmy, aby te właściwości na zewnątrz były dostępne tylko do odczytu. Robiliśmy to już wcześniej, tworząc gettery dla każdej właściwości i nie tworząc setterów.

Rozwiążmy teraz to zadanie wykorzystując metodę magiczną __get. Będziemy zwracać w niej wartość żądanej właściwości. Jak to zrobić: nazwa żądanej właściwości trafia do parametru metody __get, w naszym przypadku $property.

Oznacza to, że możemy odczytać właściwość, której nazwa jest przechowywana w zmiennej, w ten sposób: $this->$property (nazwa właściwości będzie zmienną, czyli z dolarem na początku, przerabialiśmy to na poprzednich lekcjach).

Stwórzmy opisaną metodę __get:

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

Wykorzystajmy ją do odczytu właściwości:

<?php $test = new Test; echo $test->prop1; // wyświetli 1 echo $test->prop2; // wyświetli 2 ?>

Próba zapisania czegoś do właściwości spowoduje błąd:

<?php $test = new Test; $test->prop1 = 2; // zwróci błąd ?>

To dokładnie to, czego potrzebujemy: właściwość można odczytywać, ale nie można do niej zapisywać.

Próba odczytu nieistniejącej właściwości zwróci błąd:

<?php $test = new Test; echo $test->prop3; // zwróci błąd ?>

Zwróć również uwagę na następujący niuans: kiedy robiliśmy właściwości tylko do odczytu starym sposobem, to aby odczytać właściwość, używaliśmy metody-gettera.

W nowym sposobie będziemy się odwoływać właśnie do właściwości, jakby były publiczne. Ale zapisać do nich nie będziemy mogli, jakby były prywatne.

Niech będzie dana taka klasa User, której właściwości są dostępne tylko do odczytu za pomocą getterów:

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

Przerób kod tej klasy tak, aby zamiast getterów używana była metoda magiczna __get.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć