php - 如何初始化静态变量

标签 php class static-members

我有这个代码:

private static $dates = array(
  'start' => mktime( 0,  0,  0,  7, 30, 2009),  // Start date
  'end'   => mktime( 0,  0,  0,  8,  2, 2009),  // End date
  'close' => mktime(23, 59, 59,  7, 20, 2009),  // Date when registration closes
  'early' => mktime( 0,  0,  0,  3, 19, 2009),  // Date when early bird discount ends
);

这给了我以下错误:

Parse error: syntax error, unexpected '(', expecting ')' in /home/user/Sites/site/registration/inc/registration.class.inc on line 19

所以,我想我做错了什么……但如果不是那样,我该怎么做呢?如果我用常规字符串更改 mktime 内容,它就可以工作。所以我知道我可以这样做有点像那样..

有人指点一下吗?

最佳答案

PHP 无法解析初始化程序中的重要表达式。

我更喜欢在类的定义之后添加代码来解决这个问题:

class Foo {
  static $bar;
}
Foo::$bar = array(…);

class Foo {
  private static $bar;
  static function init()
  {
    self::$bar = array(…);
  }
}
Foo::init();

PHP 5.6现在可以处理一些表达式了。

/* For Abstract classes */
abstract class Foo{
    private static function bar(){
        static $bar = null;
        if ($bar == null)
            bar = array(...);
        return $bar;
    }
    /* use where necessary */
    self::bar();
}

关于php - 如何初始化静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/693691/

相关文章:

php 如何做包含正确的方法

c++ - 用c++中的类对小于30的奇数进行迭代和平方

r - 编写用户函数以返回每个变量的列位置、列名、模式和类

php - 为什么 window.location 不重定向页面

php - 添加安全检查后 PDF 生成过程无法加载图像(cookie 未通过?)

c++ - 仅 header 库中静态成员变量的正确 setter 和 getter

java - 如何解决这个静态字段名称冲突?

c# - ConcurrentDictionary 线程安全到我可以将它用于静态缓存的程度吗?

php - php中如何去掉大括号

C++ | DLL/EXE - 如何从导出类中调用另一个类方法?