2012-05-27 11 views
19

क्या आप PHP में कक्षा में ऑब्जेक्ट्स की स्थिर सरणी प्रारंभ कर सकते हैं? जैसा आपPHP - ऑब्जेक्ट्स की स्थिर सरणी को परिभाषित करें

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

कर सकते हैं लेकिन जब मैं

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

जहां myotherclass सही MyClass ऊपर परिभाषित किया गया है है। हालांकि यह एक त्रुटि फेंकता है; क्या इसे हासिल करने का कोई तरीका है?

+0

आप हमें बता सकते हैं त्रुटि है? – xbonez

+4

कन्स्ट्रक्टर के भीतर '$ blah2' सेट करें। आप संपत्ति परिभाषा में रनटाइम-गणना मान सेट नहीं कर सकते हैं। – Wiseguy

+0

@Wiseguy क्या मुझे आपका संदेश सही मिला? – Brett

उत्तर

24

नहीं। http://php.net/manual/en/language.oop5.static.php से:

किसी अन्य पीएचपी स्थिर चर की तरह

, स्थिर गुणों केवल एक शाब्दिक या निरंतर का उपयोग कर प्रारंभ किया जा सकता है; अभिव्यक्ति की अनुमति नहीं है। तो जब आप एक स्थिर गुण को एक पूर्णांक या सरणी (उदाहरण के लिए) में प्रारंभ कर सकते हैं, तो आप इसे फ़ंक्शन रिटर्न मान या किसी ऑब्जेक्ट पर किसी अन्य चर में प्रारंभ नहीं कर सकते हैं।

मैं, null को संपत्ति से प्रारंभ यह एक्सेसर विधि के साथ निजी बनाने, और एक्सेसर "असली" प्रारंभ पहली बार यह कहा जाता है ऐसा करने के लिए होगा। यहाँ एक उदाहरण है:

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

आप इसे शुरू नहीं किया जा सकता है इन मूल्यों के लिए, आप एक स्थिर विधि उन्हें अपने स्वयं के आंतरिक संग्रह में पुश करने के लिए, कॉल कर सकते हैं के रूप में मैं नीचे किया है। यह उतना करीब हो सकता है जितना आपको मिलेगा।

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

डेमो: http://codepad.org/InTPdUCT

निम्नलिखित में से कौन उत्पादन में परिणाम है:

Array 
(
    [0] => foo Object 
    (
     [bar] => fizzbuzz 
    ) 
    [1] => foo Object 
    (
     [bar] => fizzbuzz 
    ) 
    [2] => foo Object 
    (
     [bar] => fizzbuzz 
    ) 
)
संबंधित मुद्दे