मुझे इस तरह काम करने के लिए कुछ कैसे मिलेगा?यदि मेरे पास कक्षा के नाम की स्ट्रिंग है तो मैं कक्षा से स्थिर विधि कैसे कॉल कर सकता हूं?
$class_name = 'ClassPeer';
$class_name::doSomething();
मुझे इस तरह काम करने के लिए कुछ कैसे मिलेगा?यदि मेरे पास कक्षा के नाम की स्ट्रिंग है तो मैं कक्षा से स्थिर विधि कैसे कॉल कर सकता हूं?
$class_name = 'ClassPeer';
$class_name::doSomething();
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
परफेक्ट के बाद से काम करता है। मैं स्थिर विधि को कॉल करने के लिए उपरोक्त दूसरे उदाहरण का उपयोग कर रहा हूं। धन्यवाद जिमी! –
@jimyi, जो तेजी से है? – Pacerier
मुझे काफी यकीन है कि पहला व्यक्ति तेज़ है क्योंकि यह वर्ग नाम और विधि नाम पुनर्प्राप्त करने के लिए स्ट्रिंग को पार्स करने से बचाता है। लेकिन यह सिर्फ एक अनुमान है, शायद सरणी प्रारंभ करने में स्ट्रिंग को पार्स करने से अधिक समय लगता है। – jurchiks
प्रतिबिंब (PHP 5 इसका समर्थन करता है) यह है कि आप यह कैसे करेंगे। उस पृष्ठ को पढ़ें और आपको यह समझने में सक्षम होना चाहिए कि इस तरह के फ़ंक्शन को कैसे बुलाया जाए।
$func = new ReflectionFunction('somefunction');
$func->invoke();
उपयोग call_user_func
। PHP callbacks
पर भी पढ़ें।
call_user_func(array($class_name, 'doSomething'), $arguments);
आईडीई स्वत: पूर्ण और त्रुटि का पता लगाने की शक्ति दिलाने के लिए, इस का उपयोग कक्षा का एक उदाहरण।
यदि मैं आपको अधिक अपवर्तित कर सकता हूं तो मैं चाहता हूं। – josh123a123
वोल्करके से सबसे सरल समाधान को लगभग याद करने के बाद, मैंने इसे विस्तारित करने और इसे एक पोस्ट में रखने का निर्णय लिया है। उदाहरण के लिए स्थिर वर्ग
// calling class static method
$className = get_class($this);
$result = $className::caluclate($arg1, $arg2);
// using class static member
foreach ($className::$fields as $field) {
:
}
$ class_name :: doSomething(); मेरे लिए ठीक काम करता है। – VolkerK
@ वोल्करके, मुझे कोशिश करते समय एक T_PAAMAYIM_NEKUDOTAYIM त्रुटि मिल रही है। –
@ वोल्करके: वह वाक्यविन्यास PHP 5.3 – Kornel