【发布时间】:2013-02-22 22:59:11
【问题描述】:
假设我有这个特质:
trait MyTrait{
protected static $_statVar = 'defaultStaticVal';
protected $_var = 'defaultVal';
}
还有一个使用它的类
class MyClass{
use MyTrait;
}
我将如何更改默认值,例如
use MyTrait{
MyTrait::$_statVar = 'nonDefaultStaticVal';
MyTrait->_var = 'nonDefaultVal';
}
我知道显示的语法不正确,而且目前不允许简单地通过更改继承的特征值来更改它们。这给我留下了哪些选择/替代方案?
【问题讨论】:
-
有什么特殊原因不能只更改类的构造函数中的值或使用 setter 方法?
-
构造函数在 trait 中并且是私有的。我目前正在考虑使用setter方法。
-
单身特征?也许看看这里 -> stackoverflow.com/questions/7104957/… 及其使用
init方法来处理任何额外的构造函数配置 -
不错。但我的重点更多在于设置特征中的默认变量值,但为使用这些特征的某些类更改这些默认值。
-
那么我认为您需要重新考虑在特征内部提供变量,而是使用抽象类,它本身使用特征,但在其外部声明变量。后期静态绑定可以处理具有不同静态值的派生类
标签: php default-value traits class-variables