我正在开发一个需要通过静态函数调用和对象方法访问的类。我发现的一件事是我在多个函数之间重复逻辑。
简化示例:
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,而且我不需要支持
第二种方法的问题是,当错误报告设置为E_STRICT
。例如:
严格标准:非静态方法 Foo::bar() 不应在 /home/yacoby/dev/php/test.php 第 10 行静态调用
PHP6 的一个要点是 E_STRICT 错误已移至 E_ALL。换句话说,E_ALL 将覆盖所有错误,包括不允许您静态调用非静态方法。
另一种方法可能是将验证逻辑移至静态函数。这样非静态函数和静态函数就可以调用验证逻辑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)