Search code examples
phparraysobject

PHP - define static array of objects


can you initialize a static array of objects in a class in PHP? Like you can do

class myclass {
    public static $blah = array("test1", "test2", "test3");
}

but when I do

class myclass {
    public static $blah2 = array(
        &new myotherclass(),
        &new myotherclass(),
        &new myotherclass()
    );
}

where myotherclass is defined right above myclass. That throws an error however; is there a way to achieve it?


Solution

  • Nope. From http://php.net/manual/en/language.oop5.static.php:

    Like any other PHP static variable, static properties may only be initialized using a literal or constant; expressions are not allowed. So while you may initialize a static property to an integer or array (for instance), you may not initialize it to another variable, to a function return value, or to an object.

    I would initialize the property to null, make it private with an accessor method, and have the accessor do the "real" initialization the first time it's called. Here's an example:

        class myclass {
    
            private static $blah2 = null;
    
            public static function blah2() {
                if (self::$blah2 == null) {
                   self::$blah2 = array( new myotherclass(),
                     new myotherclass(),
                     new myotherclass());
                }
                return self::$blah2;
            }
        }
    
        print_r(myclass::blah2());