PHP да ООПда мавжуд булмаган хусусиятни ўқиш

Келинг, мавжуд булмаган хусусиятга маълумот ёзмаға ҳаракат қилайлик - бу ишлайди:

index.php<?php
  $test = new Test;
  
  $test->prop3 = 3; // 3 ни ёзамиз
  echo $test->prop3; // 3 ни чиқаради
?>

Фараз қилайлик, биз мавжуд булмаган хусусиятларга ёзувга рухсат бермоқчи эмасмиз. Ва, умуман, фақат prop1 ва prop2 хусусиятларигагина ёзувга рухсат бермоқчимиз.

Буни қилиш осон - __set усулида мос шартни қўшиш кифоя:

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
    
    public function __set($property, $value)
    {
      // Шартни ѕзамиз:
      if ($property == 'prop1' or $property == 'prop2') {
        $this->$property = $value;
      }
    }
    
    public function __get($property)
    {
      return $this->$property;
    }
  }
?>

Агар бундай хусусиятлар кўп бўлса, у ҳолда уларни шартда санаб чиқиш жуда қулай бўлмайди.

Келинг, ёзишга рухсат берилган хусусиятларни массивга ёзиб оламиз ва хусусиятнинг шу массивда мавжудлигини in_array функцияси ёрдамида текширамиз:

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
    
    public function __set($property, $value)
    {
      $properties = ['prop1', 'prop2']; // рухсат берилган хусусиятлар
      
      if (in_array($property, $properties)) {
        $this->$property = $value;
      }
    }
    
    public function __get($property)
    {
      return $this->$property;
    }
  }
?>