2011-12-21 79 views
1

我在Zend Framework類中注意到的模式之一是與以下類似的代碼。它可以在20-30個文件中。是否有可用於消除約定樣板代碼的基礎Zend類?

public function __construct($options = null) 
{ 
    if (is_array($options)) { 
     $this->setOptions($options); 
    } elseif ($options instanceof Zend_Config) { 
     $this->setConfig($options); 
    } 

    // do custom initialization 
    $this->_init(); 
} 

public function setOptions(array $options) 
{ 
    foreach ($options as $key => $value) { 
     $this->set($key, $value); 
    } 

    return $this; 
} 

public function set($property, $value) 
{ 
    if (!is_string($property) || empty($property)) { 
     require_once 'Zend/Navigation/Exception.php'; 
     throw new Exception('Invalid argument: $property must be a non-empty string'); 
    } 

    $method = 'set' . self::_normalizePropertyName($property); 

    if ($method != 'setOptions' && $method != 'setConfig' && 
     method_exists($this, $method)) { 
     $this->$method($value); 
    } else { 
     $this->_properties[$property] = $value; 
    } 

    return $this; 
} 

當我開發自己的班級時,我也放了類似的鍋爐板代碼。是否有一個Zend框架類,已經有這個最小的鍋爐板代碼,我可以擴展呢?

如果不是,爲什麼沒有一個?對代碼保持乾爽和一致性會有幫助嗎?

回答

2

我不是ZF的貢獻者,但我相信答案很簡單,隨着時間的推移,隨着組件被添加到框架中,這已經演變成爲一個慣例。 ZF2(目前處於測試階段)確實通過其他組件可以擴展的標準選項類來解決此問題 - 請參閱https://github.com/zendframework/zf2/blob/4f3c989efd04f07c78415192b0dee3c867e02199/library/Zend/Stdlib/Options.php

在短期內,如果您發現自己需要類似的東西,爲什麼不創建類似此類的類,延伸。

+0

好點,只是認爲我會提到flammon,我通常有一個模型的基類,並且映射器是我的應用程序中的所有模型/映射器的擴展。它們包含許多這些實用功能以及您可能經常需要的其他代碼。 – drew010 2011-12-22 04:19:03

+0

我開發了我自己的基類,但希望得到一個與ZF1一起出現的基礎類,但找不到它。現在我更加急於想要與ZF2合作。謝謝。 – 2011-12-23 13:47:02

相關問題