2012-02-13 70 views
4

使用ZF快速入門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 2012-02-13 14:34:54