PHP - 为什么我不能声明静态const变量?

时间:2010-10-28 19:25:14

标签: php oop

我会用它们来实现factory模式,例如:

class Types{
   static const car = "CarClass";
   static const tree = "TreeClass";
   static const cat = "CatClass";
   static const deathstar = "DeathStarClass";
}

我想像他们一样使用它们:

$x = new Types::car;

有可能吗?

如果我的班级在construcor中有参数,那该怎么办呢?

$x = new Types::car(123);

3 个答案:

答案 0 :(得分:21)

您的代码应为:

class Types{
   const car = "CarClass";
   const tree = "TreeClass";
   const cat = "CatClass";
   const deathstar = "DeathStarClass";
}

请注意,由于常量与类定义相关联,因此根据定义它们是静态的。

来自文档:

  

从PHP 5.3.0开始,它是可能的   使用变量引用类。   变量的值不能是a   关键字(例如自我,父母和   静态)。

http://www.php.net/manual/en/language.oop5.static.php

更多信息:

http://php.net/manual/en/language.oop5.constants.php

答案 1 :(得分:4)

常量已经是静态的,因为它们与类的实例无关。以下是如何定义它们并根据需要使用它们:

class Types{
   const car = "CarClass";
   const tree = "TreeClass";
   const cat = "CatClass";
   const deathstar = "DeathStarClass";
}

$x = Types::car;

答案 2 :(得分:1)

这是一个常数。你无法改变它。所以你有一个非静态常量成员没有任何意义。因此,您不必将它们声明为静态或类变量。