2012-02-13 1 views
4

с использованием ZF quickstart create model, в качестве основы для этой темы.
Я хотел бы точно понять, что в этом контексте предполагается использовать метод __construct и setOptions().
Независимо от того, сколько раз я стучаю по нему, я просто не понимаю, что делают эти два метода.Zend Framework Quickstart Модель конструктора

public function __construct(array $options = null) 
    { 
     //if it is an array of options the call setOptions and apply those options 
     //so what? What Options 
     if (is_array($options)) { 
      $this->setOptions($options); 
     } 
    } 

public function setOptions(array $options) 
    { 
     //I can see this starts by getting all the class methods and return array() 
     $methods = get_class_methods($this); 
     //loop through the options and assign them to $method as setters? 
     foreach ($options as $key => $value) { 
      $method = 'set' . ucfirst($key); 
      if (in_array($method, $methods)) { 
       $this->$method($value); 
      } 
     } 
     return $this; 
    } 

Я действительно заблудился на setOptons(), я не могу понять, что он пытается сделать. Я понимаю, что это абстрагирование какого-то поведения, я просто не могу понять, что.
Насколько я могу судить, это так «так что!». Я хотел бы понять это, поскольку это может оказаться важным.

ответ

4

Если вы передаете $options как массив

{ ["name"] => "RockyFord" } 

затем setOptions метод будет вызывать

setName("RockyFord"); 

если setName метод существует в этом классе.

foreach ($options as $key => $value) { // Loops through all options with Key,Value 
     $method = 'set' . ucfirst($key); // $method becomes 'setName' if key is 'name' 
     if (in_array($method, $methods)) { // Check if this method (setName) exists in this class 
      $this->$method($value); // Calls the method with the argument 
     } 
    } 
+0

Спасибо, я понимаю внезапно. Это позволяет нам передать массив, явно явно вызывающий get * или set * – RockyFord