【问题标题】:Static variable issue静态变量问题
【发布时间】:2013-02-08 00:10:13
【问题描述】:

我有这个我正在定义的静态变量,但我的代码中出现错误:

.....中出现意外的“$_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/';
}

【问题讨论】:

  • 这不是静态变量问题。似乎不可能对 any 变量执行此操作 - 可能出于类似于 Why don't PHP attributes allow functions? 的原因
  • 设置变量的值,只能在方法中
  • 这里不要使用静态变量,真的不需要静态的..

标签: php class


【解决方案1】:

你可以使用静态函数

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

可以像这样使用

Constants::getTemplatePath();

【讨论】:

    【解决方案2】:

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

    class Constants {
        ...
    
        public static $template_path;
    }
    
    Constants::$template_path = $_SERVER['DOCUMENT_ROOT'] . '/../_html/';
    

    【讨论】:

    • 非常感谢。可惜你不能像我那样做,我的意思是我没有使用任何功能之类的?
    • 很高兴为您提供帮助...我遇到了同样的问题,我必须像在示例中显示的那样解决它...不像我想要的那样干净,但它确实有效.. . 不幸的是,PHP 不允许像我们希望的那样声明非静态值... :)
    【解决方案3】:

    你只能在定义类成员时直接赋值。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多