2010-10-28 110 views
13

我会用它们来实现factory模式,例如:PHP - 为什么我无法声明静态常量变量?

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

而且我想使用它们,如:

$x = new Types::car; 

这可能吗?

而如果我的类construcor已parametr,不工作:

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

你的意思是,一个静态常数,而不是一个动态常量? :) – 2010-10-28 19:26:00

+0

检查编辑PLZ;) – 2010-10-28 19:28:26

+0

@John我还是不明白你的例子。你为什么要宣布同样的常数四次?预期的结果是什么?像这样的'const'关键字应该可以工作,只需要关闭'static'即可。对于一个常量来说这没有意义。 – 2010-10-28 19:29:04

回答

21

你的代码应该是:

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

注意,由于常数是绑到类定义,它们根据定义是静态的。

从文档:

作为PHP 5.3.0的,它可能 参考使用可变的类。 变量的值不能是 关键字(例如,self,parent和 static)。

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

更多信息:

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

+0

OOO,exacly!我想实现!但是如果我的班级在建设者身上行事如何呢?我不能这样做:'$ x = new Types :: car(123);'...:( – 2010-10-28 19:31:59

+3

@约翰:实例化一个变量类,首先将常量赋值给一个变量:'$ type = Types :: car; $ x = new $ type(123);' – BoltClock 2010-10-28 19:59:58

+0

我唯一要补充的是命名常量常量全部大写 – Ice76 2017-11-03 17:38:01

1

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

4

常量已经是静态的,因为它们并不依赖于类的实例。以下是如何定义它们并按照自己的意愿使用它们:

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

$x = Types::car; 
+0

您的意思是'Types :: car'。除此之外,+1 – 2010-10-28 19:31:32

相关问题