Հատկությունների գրառում կախարդանքի միջոցով OOP-ում PHP-ում

__set կախարդական մեթոդը կանչվում է, երբ փորձում են փոխել գոյություն չունեցող կամ թաքնված հատկության արժեքը: Որպես պարամետրեր այն ընդունում է հատկության անունը և այն արժեքը, որին փորձում են վերագրել այն:

Եկեք նայենք գործնական օրինակով: Ենթադրենք մենք ունենք հետևյալ Test դասը:

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
  }
?>

Եկեք այս դասում ստեղծենք __set կախարդական մեթոդը, որը var_dump ֆունկցիայի միջոցով կարտածի այն հատկության անունը, որին դիմել են, և արժեքը, որը փորձում են սահմանել այդ հատկությանը.

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
    
    public function __set($property, $value)
    {
      var_dump($property . ' ' .$value);
    }
  }
?>

Ստուգենք մեր դասի աշխատանքը.

index.php<?php
  $test = new Test;
  $test->prop = 'value'; // __set մեթոդի var_dump-ը կարտածի 'prop value'
?>

Եկեք այժմ սահմանենք արժեք այն հատկությանը, որի անունը պահվում է $property փոփոխականում.

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
    
    public function __set($property, $value)
    {
      $this->$property = $value; // սահմանում ենք արժեքը
    }
  }
?>

Այժմ մենք կկարողանանք գրել փակ հատկություններին դասի սահմաններից դուրս.

index.php<?php
  $test = new Test;
  
  $test->prop1 = 1; // կգրենք 1
  $test->prop2 = 2; // կգրենք 2
?>

Գրել կարող ենք, սակայն, ստուգել՝ արդյոք ինչ-որ բան գրվեց այնտեղ - ոչ, քանի որ հատկությունները փակ են:

Կարելի է ստեղծել գետտեր այդ հատկությունների համար կամ ուղղակի օգտագործել __get կախարդական մեթոդը: Օգտագործենք երկրորդ տարբերակը.

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
    
    public function __set($property, $value)
    {
      $this->$property = $value;
    }
    
    // Հատկությունների կախարդական գետտերը.
    public function __get($property)
    {
      return $this->$property;
    }
  }
?>

Ահա այժմ մենք կարող ենք ստուգել մեր դասի աշխատանքը: Ստուգենք.

index.php<?php
  $test = new Test;
  
  $test->prop1 = 1; // կգրենք 1
  $test->prop2 = 2; // կգրենք 2
  
  echo $test->prop1; // կարտածի 1
  echo $test->prop2; // կարտածի 2
?>

Իրականում, իհարկե, չարժե բոլորին թույլատրել գրել փակ հատկություններին, հակառակ դեպքում կկորչի այդ փակ հատկությունների իմաստը (ավելի հեշտ է դրանք դարձնել հանրային և վերջ):

Ուստի այս մեթոդը պետք է կիրառել միայն այն դեպքում, երբ դրա համար իսկապես անհրաժեշտություն կա: Հաջորդ դասերում մենք կդիտարկենք հաջող կիրառման օրինակներ: