Я работаю над классом, который должен быть доступен через вызовы статических функций, а также методы объекта. Одна вещь, которую я обнаружил, заключается в том, что я дублирую логику в нескольких функциях.
Упрощенный пример:
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.