2009-06-15 12 views
27

मुझे इस तरह काम करने के लिए कुछ कैसे मिलेगा?यदि मेरे पास कक्षा के नाम की स्ट्रिंग है तो मैं कक्षा से स्थिर विधि कैसे कॉल कर सकता हूं?

$class_name = 'ClassPeer'; 
$class_name::doSomething(); 
+3

$ class_name :: doSomething(); मेरे लिए ठीक काम करता है। – VolkerK

+0

@ वोल्करके, मुझे कोशिश करते समय एक T_PAAMAYIM_NEKUDOTAYIM त्रुटि मिल रही है। –

+1

@ वोल्करके: वह वाक्यविन्यास PHP 5.3 – Kornel

उत्तर

48

PHP के संस्करण के आधार पर:

$class_name = 'ClassPeer'; 

$r = new \ReflectionClass($class_name); 

// @param ClassPeer $instance 

$instance = $r->newInstanceWithoutConstructor(); 

//$class_name->doSomething(); 
$instance->doSomething(); 

असल में यहाँ हम पर स्थिर विधि बुला रहे हैं:

call_user_func(array($class_name, 'doSomething')); 
call_user_func($class_name .'::doSomething'); // >5.2.3 
+0

परफेक्ट के बाद से काम करता है। मैं स्थिर विधि को कॉल करने के लिए उपरोक्त दूसरे उदाहरण का उपयोग कर रहा हूं। धन्यवाद जिमी! –

+2

@jimyi, जो तेजी से है? – Pacerier

+0

मुझे काफी यकीन है कि पहला व्यक्ति तेज़ है क्योंकि यह वर्ग नाम और विधि नाम पुनर्प्राप्त करने के लिए स्ट्रिंग को पार्स करने से बचाता है। लेकिन यह सिर्फ एक अनुमान है, शायद सरणी प्रारंभ करने में स्ट्रिंग को पार्स करने से अधिक समय लगता है। – jurchiks

4

प्रतिबिंब (PHP 5 इसका समर्थन करता है) यह है कि आप यह कैसे करेंगे। उस पृष्ठ को पढ़ें और आपको यह समझने में सक्षम होना चाहिए कि इस तरह के फ़ंक्शन को कैसे बुलाया जाए।

$func = new ReflectionFunction('somefunction'); 
$func->invoke(); 

Documentation Link

9

आईडीई स्वत: पूर्ण और त्रुटि का पता लगाने की शक्ति दिलाने के लिए, इस का उपयोग कक्षा का एक उदाहरण।

+1

यदि मैं आपको अधिक अपवर्तित कर सकता हूं तो मैं चाहता हूं। – josh123a123

0

वोल्करके से सबसे सरल समाधान को लगभग याद करने के बाद, मैंने इसे विस्तारित करने और इसे एक पोस्ट में रखने का निर्णय लिया है। उदाहरण के लिए स्थिर वर्ग

// calling class static method 
$className = get_class($this); 
$result = $className::caluclate($arg1, $arg2); 

// using class static member 
foreach ($className::$fields as $field) { 
    : 
} 
संबंधित मुद्दे

 संबंधित मुद्दे