Атрыманне ўласцівасцяў праз магію ў ААП у 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' - імя ўласцівасці
?>

Як вы бачыце, наш магічны метад рэагуе на зварот да прыватных і неіснуючых уласцівасцяў, але ігнаруе зварот да публічных - яны працуюць так, як і працавалі раней.