【发布时间】:2017-06-22 14:19:19
【问题描述】:
考虑这样一种情况:有多个类都需要访问配置存储机制,但由于框架的架构,不能从基类扩展。 除此之外,我想保持存储机制的灵活性(以后能够切换存储后端)。
我觉得创建一个进行实际保存的 trait 并在所有类中使用这些函数是有意义的(例如,我使用 $_SESSION 作为存储系统):
trait MyTrait {
function setting_enabled() {
return !empty($_SESSION['setting']) ? TRUE : FALSE;
}
function enable_setting() {
$_SESSION['setting'] = TRUE;
}
function disable_setting() {
$_SESSION['setting'] = FALSE;
}
}
这在课堂上效果很好。然而,还有一个文件不是类,而只是普通的 PHP,我还需要知道是否启用了该设置。
我尝试将函数声明为static:
trait MyTrait {
static function setting_enabled() { // Declared as static function
return !empty($_SESSION['setting']) ? TRUE : FALSE;
}
...
}
然后从 trait 中调用静态函数,效果很好。
if (MyTrait::setting_enabled()) {
...
}
然而感觉并不完全正确。另一方面,创建一个使用 trait 的新空类并实例化它来获取值似乎有很多开销。
我可以这样做吗(从 PHP 5.6 开始,但也考虑到 PHP 7.x 的未来)?
【问题讨论】:
标签: php class standards traits