我正在研究一个需要通过静态函数调用和对象方法访问的类。我发现的一件事是我正在跨多个函数复制逻辑。
简化示例:
class Configurable{
protected $configurations = array();
protected static $static_configurations = array();
public function configure($name, $value){
// ...lots of validation logic...
$this->configurations[$name] = $value;
}
public static function static_configure($name, $value){
// ...lots of validation logic (repeated)...
self::$static_configurations[$name] = $value;
}
}
我找到了解决方案,但感觉真的很脏:
class Configurable{
protected $configurations = array();
protected static $static_configurations = array();
public function configure($name, $value){
// ...lots of validation logic...
if (isset($this)){
$this->configurations[$name] = $value;
}
else{
self::$static_configurations[$name] = $value;
}
}
}
我还需要静态函数,以便我可以在整个应用程序中设置配置。此外,这种技术的好处是我可以在两个范围内使用相同的方法名称。
像这样的测试范围有什么问题吗?性能问题、前向兼容性问题等。这一切都适用于 PHP 5.2,我不需要支持 <5。