PHP - define static array of objects

后端 未结 2 1635

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\", \"test         


        
相关标签:
2条回答
  • 2020-12-31 00:06

    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());
    
    0 讨论(0)
  • 2020-12-31 00:17

    While you cannot initialize it to have these values, you can call a static method to push them into its own internal collection, as I've done below. This may be as close as you'll get.

    class foo {
      public $bar = "fizzbuzz";
    }
    
    class myClass {
      static public $array = array();
      static public function init() {
        while ( count( self::$array ) < 3 )
          array_push( self::$array, new foo() );
      }
    }
    
    myClass::init();
    print_r( myClass::$array );
    

    Demo: http://codepad.org/InTPdUCT

    Which results in the following output:

    Array
    (
      [0] => foo Object
        (
          [bar] => fizzbuzz
        )
      [1] => foo Object
        (
          [bar] => fizzbuzz
        )
      [2] => foo Object
        (
          [bar] => fizzbuzz
        )
    )
    0 讨论(0)
提交回复
热议问题