是否有可用于消除约定样板代码的基础Zend类?

问题描述:

我在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框架类,已经有这个最小的锅炉板代码,我可以扩展呢?

如果不是,为什么没有一个?对代码保持干爽和一致性会有帮助吗?

我不是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