phpclassstatic-members

How to initialize static variables


I have this code:

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
);

Which gives me the following error:

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

So, I guess I am doing something wrong... but how can I do this if not like that? If I change the mktime stuff with regular strings, it works. So I know that I can do it sort of like that..

Anyone have some pointers?


Solution

  • PHP can't parse non-trivial expressions in initializers.

    I prefer to work around this by adding code right after definition of the class:

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

    or

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

    PHP 5.6 can handle some expressions now.

    /* 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();
    }