2013-02-22 74 views
2

我有我定义这个静态变量,但我在我的代码得到一个错误:静态变量问题

..unexpected“$ _ SERVER”(T_VARIABLE)在...

class Constants { 
     const ACCOUNTTYPE_SUPER_ADMIN = 1; 
     const ACCOUNTTYPE_COMPANY_ADMIN = 2; 
     const ACCOUNTTYPE_AREA_ADMIN = 3; 
     const ACCOUNTTYPE_END_USER  = 4; 

     const SAVETYPE_NEW    = 0; 
     const SAVETYPE_EDIT    = 1; 

     const LICENSE_VALIDITY_YEARS = 1; 
     const LICENSE_VALIDITY_LEFT_MAX = 12; 

     public static $template_path = $_SERVER['DOCUMENT_ROOT'] . '/../_html/'; 
} 
+0

这不是一个静态变量问题。对于任何*变量来说这似乎是不可能的 - 可能出于类似于[为什么PHP属性不允许函数?]的原因(http://stackoverflow.com/q/3960323) – 2013-02-22 11:27:15

+0

设置一个变量的值,你只能在方法 – Winston 2013-02-22 11:30:23

+0

这里不要使用静态变量,真的不需要静态变量.. – Andrew 2013-02-22 11:33:16

回答

3

使用可变这样你不能声明静态变量,但您可以使用此解决方法:

class Constants { 
    ... 

    public static $template_path; 
} 

Constants::$template_path = $_SERVER['DOCUMENT_ROOT'] . '/../_html/'; 
+0

非常感谢。太糟糕了,你不能像我那样做,我的意思是我没有使用任何功能或类似的东西? – silkfire 2013-02-22 12:06:10

+1

很高兴帮助...我面临同样的问题,我不得不像我在我的示例中显示的那样解决它...并不像我想的那么干净,但它的工作......不幸的是PHP不允许用我们希望的非静态值声明... :) – Frhay 2013-02-22 13:09:20

2

您只能在定义类成员时分配直接值。

但是你可以创建一个方法init()来改变你的模板路径成员值。

public static function init(){ self::$template_path = $_SERVER['DOCUMENT_ROOT'] . '/../_html/'; } 

并在第一次使用该类或实例化它时运行它。

0

您可以使用静态函数

class Constants { 
    // ... 
    public static function getTemplatePath() 
    { 
     return $_SERVER['DOCUMENT_ROOT'] . '/../_html/'; 
    } 
} 

,并可以像使用

Constants::getTemplatePath();