თვისებების მიღება მაგიის მეშვეობით OOP-ში PHP-ში
შემდეგი მაგიური მეთოდი, რომელსაც ჩვენ
განვიხილავთ, ეწოდება __get. ეს
მეთოდი იწყებს მოქმედებას, როდესაც ვცდილობთ წავიკითხოთ
პრივატული ან დაცული თვისების მნიშვნელობა.
თუ __get მეთოდს რომელიმე
კლასში გავაკეთებთ, მაშინ ყველა მიმართვა არაარსებულ
ან დამალულ თვისებებთან ამ მეთოდის მიერ
იქნება დამუშავებული.
ამ შემთხვევაში PHP ავტომატურად გადასცემს მოთხოვნილი თვისების სახელს ამ მეთოდის პირველ პარამეტრში, ხოლო ამ მეთოდის მიერ დაბრუნებული მნიშვნელობა აღიქმება როგორც იმ თვისების მნიშვნელობა, რომელთანაც მოხდა მიმართვა.
სავარაუდოდ, ჯერ არ არის ძალიან გასაგები, როგორ
მუშაობს ეს, ამიტომ მოდით შევხედოთ პრაქტიკულ
მაგალითს. დავუშვათ, გვაქვს Test კლასი
პრივატული და პუბლიკური
თვისებებით:
<?php
class Test
{
public $prop1 = 1; // პუბლიკური თვისება
private $prop2 = 2; // პრივატული თვისება
}
?>
მოდით დავამატოთ ჩვენს კლასში მაგიური მეთოდი
__get, რომელიც თავიდან უბრალოდ
დააბრუნებს იმ თვისების სახელს, რომელთანაც მოხდა
მიმართვა:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // უბრალოდ დავაბრუნოთ თვისების სახელი
}
}
?>
მოდით შევამოწმოთ შექმნილი მაგიური მეთოდის მუშაობა. მივმართოთ სამი ტიპის თვისებას: პუბლიკურ თვისებას, პრივატულს და არაარსებულს:
<?php
$test = new Test;
// მივმართოთ პუბლიკურ თვისებას:
echo $test->prop1; // გამოიტანს 1 - ანუ თვისების მნიშვნელობას
// მივმართოთ პრივატულ თვისებას:
echo $test->prop2; // გამოიტანს 'prop2' - თვისების სახელი
// მივმართოთ არაარსებულ თვისებას:
echo $test->prop3; // გამოიტანს 'prop3' - თვისების სახელი
?>
როგორც ხედავთ, ჩვენი მაგიური მეთოდი რეაგირებს პრივატულ და არაარსებულ თვისებებთან მიმართვაზე, მაგრამ იგნორირებას უკეთებს პუბლიკურთან მიმართვას - ისინი მუშაობენ ისე, როგორც ადრე მუშაობდნენ.