Kusoma Sifa Isiyopo katika OOP kwenye PHP

Wacha tujaribu kuandika data kwenye sifa isiyopo - hii itafanya kazi:

index.php<?php
  $test = new Test;
  
  $test->prop3 = 3; // tutaandika 3
  echo $test->prop3; // itatoa 3
?>

Wacha tusitake kuruhusu kuandika kwenye sifa zisizopo. Na, kwa ujumla, tunataka kuruhusu uandishi tu kwenye sifa prop1 na prop2.

Hii inaweza kufanyika kwa urahisi - inatosha katika mbinu __set kuongeza sharti linalofaa:

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
    
    public function __set($property, $value)
    {
      // Tutaandika sharti:
      if ($property == 'prop1' or $property == 'prop2') {
        $this->$property = $value;
      }
    }
    
    public function __get($property)
    {
      return $this->$property;
    }
  }
?>

Ikiwa kuna sifa nyingi kama hizi, basi sio rahisi sana kuziorodhesha zote kwenye sharti.

Wacha tuandike sifa zilizoruhusiwa kwa uandishi kwenye safu na tuangalie uwepo wa sifa kwenye safu hii kwa kutumia kitendo in_array:

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
    
    public function __set($property, $value)
    {
      $properties = ['prop1', 'prop2']; // sifa zilizoruhusiwa
      
      if (in_array($property, $properties)) {
        $this->$property = $value;
      }
    }
    
    public function __get($property)
    {
      return $this->$property;
    }
  }
?>