2009-01-27 14 views

उत्तर

15

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

8

आपको अन्य जादू विधि, __callStatic का उपयोग करना होगा - यह केवल PHP> = 5.3 में उपलब्ध है, जिसे वास्तव में अभी तक जारी नहीं किया गया है।

+0

ध्यान दें कि अभी तक उपलब्ध नहीं है। – David

+0

आह बग्जर - मैं इस बारे में सोच रहा था, और सवाल लिखना शुरू कर दिया ... फिर मुझे __callStatic मिला लेकिन मुझे एहसास नहीं हुआ कि यह तब तक उपलब्ध नहीं होगा जब तक कि PHP 5.3 – nickf

+0

मैं "मामूली" के लिए उत्साहित नहीं हूं तब से PHP में रिलीज ... हाँ PHP5.3 मुझे भाषा के लिए आशा देता है। – David

0

जैसा कि पहले बताया गया है, कोई जादू स्थैतिक कॉलर नहीं है। लेकिन आप इस तरह कोड कर सकते हैं:

class First { 
     public static function test1(){ 
      return 1; 
     } 
     public static function test2(){ 
      return 2; 
     } 
    } 


    class Second { 
     public static function test1(){ 
      if(func_num_args()>0){ 
       return func_get_args(); 
      } 
      return 21; 
     } 
     public static function test2(){ 
      return 22; 
     } 
    } 

    class StaticFactory { 
     public static function factory($class, $method){ 
      if(func_num_args()>2){ 
       $args = func_get_args(); 
       array_shift($args); 
       array_shift($args); 
       return call_user_func_array(array($class,$method), $args); 
      }else{ 
      return call_user_func_array(array($class,$method), array()); 
      } 
     } 
    } 

    print_r(StaticFactory::factory("Second", "test1", 1, false, true)); 

    print_r(StaticFactory::factory("First", "test1")); 
संबंधित मुद्दे