Օբյեկտային կողմնորոշված PHP-ում հատկությունների ստացում կախարդության միջոցով

Հաջորդ կախարդական մեթոդը, որը մենք կքննարկենք, կոչվում է __get: Այս մեթոդը աշխատում է, երբ փորձում ենք կարդալ փակ կամ պաշտպանված հատկության արժեքը:

Եթե __get մեթոդը իրականացնենք որևէ դասում, ապա բոլոր դիմումները գոյություն չունեցող կամ թաքնված հատկություններին կմշակվեն այս մեթոդով:

Այդ դեպքում PHP-ն ավտոմատ կփոխանցի հարցված հատկության անունը այս մեթոդի առաջին պարամետրին, իսկ այս մեթոդով վերադարձված արժեքը կընկալվի որպես այն հատկության արժեք, որին դիմել էին:

Հավանաբար դեռ շատ հասկանալի չէ, թե ինչպես է սա աշխատում, ուստի եկեք նայենք գործնական օրինակին: Ենթադրենք, մենք ունենք Test դաս փակ և հանրային հատկություններով:

Test.php<?php
  class Test
  {
    public  $prop1 = 1; // հանրային հատկություն
    private $prop2 = 2; // փակ հատկություն
  }
?>

Եկեք մեր դասին ավելացնենք կախարդական մեթոդ __get, որը սկզբի համար պարզապես կլինի վերադարձնում է այն հատկության անունը, որին դիմել էին:

Test.php<?php
  class Test
  {
    public  $prop1 = 1;
    private $prop2 = 2;
    
    public function __get($property)
    {
      return $property; // պարզապես վերադարձնում ենք հատկության անունը
    }
  }
?>

Եկեք ստուգենք ստեղծված կախարդական մեթոդի աշխատանքը: Դիմենք երեք տեսակի հատկությունների՝ հանրային հատկությանը, փակ հատկությանը և գոյություն չունեցող հատկությանը:

index.php<?php
  $test = new Test;
  
  // Դիմում ենք հանրային հատկությանը:
  echo $test->prop1; // կցուցադրի 1 - այսինքն հատկության արժեքը
  
  // Դիմում ենք փակ հատկությանը:
  echo $test->prop2; // կցուցադրի 'prop2' - հատկության անունը
  
  // Դիմում ենք գոյություն չունեցող հատկությանը:
  echo $test->prop3; // կցուցադրի 'prop3' - հատկության անունը
?>

Ինչպես տեսնում եք, մեր կախարդական մեթոդը արձագանքում է փակ և գոյություն չունեցող հատկություններին դիմելիս, բայց անտեսում է դիմումը հանրային հատկություններին - դրանք աշխատում են այնպես, ինչպես աշխատում էին նախկինում: