არარსებული თვისების წაკითხვა OOP-ში 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;
    }
  }
?>