3 回答
TA贡献1982条经验 获得超2个赞
PHP无法解析初始值设定项中的非平凡表达式。
我更喜欢通过在定义类之后添加代码来解决这个问题:
class Foo {
static $bar;
}
Foo::$bar = array(…);
要么
class Foo {
private static $bar;
static function init()
{
self::$bar = array(…);
}
}
Foo::init();
PHP 5.6现在可以处理一些表达式。
/* For Abstract classes */
abstract class Foo{
private static function bar(){
static $bar = null;
if ($bar == null)
bar = array(...);
return $bar;
}
/* use where necessary */
self::bar();
}
TA贡献1886条经验 获得超2个赞
如果您可以控制类加载,则可以从那里进行静态初始化。
例:
class MyClass { public static function static_init() { } }
在类加载器中,执行以下操作:
include($path . $klass . PHP_EXT);
if(method_exists($klass, 'static_init')) { $klass::staticInit() }
更重的解决方案是使用ReflectionClass的接口:
interface StaticInit { public static function staticInit() { } }
class MyClass implements StaticInit { public static function staticInit() { } }
在类加载器中,执行以下操作:
$rc = new ReflectionClass($klass);
if(in_array('StaticInit', $rc->getInterfaceNames())) { $klass::staticInit() }
TA贡献1775条经验 获得超11个赞
我没有找到让静态变量工作的方法,而是简单地创建一个getter函数。如果您需要属于特定类的数组,并且实现起来要简单得多,也会很有帮助。
class MyClass
{
public static function getTypeList()
{
return array(
"type_a"=>"Type A",
"type_b"=>"Type B",
//... etc.
);
}
}
无论您需要列表,只需调用getter方法即可。例如:
if (array_key_exists($type, MyClass::getTypeList()) {
// do something important...
}
- 3 回答
- 0 关注
- 494 浏览
添加回答
举报