在PHP自定义类初始化静态成员
,因为PHP中没有枚举我试图做这样的事情:在PHP自定义类初始化静态成员
class CacheMode{
public static $NO_CACHE = new CacheMode(1, "No cache");
private $id, $title;
public function getId(){
return $this->id;
}
public function getTitle(){
return $this->title;
}
private function __construct($id, $title){
$this->id = $id;
$this->title = $title;
}
}
的问题是,我得到一个解析错误,如果我运行该脚本:
Parse error: syntax error, unexpected T_NEW
我“的工作和身边它”与此:
它的工作原理,但我不与它真的很高兴。 任何人都可以解释,为什么我不能做静态$ xyz = new XYZ();方式还是有更好的解决这个问题?
引用的static
手册页:
像任何其他PHP静态变量, 静态属性可以仅 使用文字或 恒定初始化;表达式是不允许的。 因此,尽管您可以将静态 属性初始化为整数或数组(对于 实例),但您可能不会将其初始化为 为其他变量,返回值为函数 或对象。
这就是为什么你不能这样做
public static $NO_CACHE = new CacheMode(1, "No cache");
其烦人,我知道了。我解决它像
class Foo {
public static $var;
}
Foo::$var = new BarClass;
它类似于Java类“静态代码块”(或者不管它们被称为^^)
该文件只includeable一点点反正一次(因为一个“类已经定义“发生错误),所以你可以确定,该类下面的代码也会执行一次。
嗨,这是一个不错的方法。但然后我需要一个公共c'tor ...我会考虑它... ;) – TerenceJackson 2011-04-09 16:08:01
不,你不需要一个公共构造函数。这个任务不在课堂上。这不适用于'protected'或'private'静态属性,当然你需要一个构造函数。 – KingCrunch 2011-04-09 16:29:21
如果您将变量分配给存储变量的类的新实例:'Foo :: $ var = new Foo;' – Michael 2011-04-09 16:56:42
作为一种优化,您可以将对象实例存储为静态字段,这样,你是不是每一个静态方法被调用时创建一个新的对象:
private static $noCache;
public static function NO_CACHE(){
if (self::$noCache == null){
self::$noCache = new CacheMode(1, __("No cache",'footballStandings'));
}
return self::$noCache;
}
但是,是的,它是烦人,当您第一次定义字段时,您无法将新对象实例分配给类字段。 :(
嗨帕斯卡,thx快速回复。我会继续我的解决方法。 – TerenceJackson 2011-04-09 15:53:23