我在Zend Framework类中注意到的一种模式是非常类似于以下的代码。它可以在大约20-30个文件中。
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 Framework类已经有了我可以扩展的最小锅炉板代码?
如果没有,为什么不存在?保持代码DRY并保持一致会不会有帮助吗?
答案 0 :(得分:2)
我不是ZF的贡献者,但我相信答案很简单,随着时间的推移,随着组件被添加到框架中,这已经发展成为一种约定。 ZF2(目前处于测试阶段)使用其他组件可以扩展的标准Options类来解决这个问题 - 请参阅https://github.com/zendframework/zf2/blob/4f3c989efd04f07c78415192b0dee3c867e02199/library/Zend/Stdlib/Options.php
在短期内,如果你发现自己需要类似的东西,为什么不创建这样的类,你自己的类可以扩展。