समाधान: PHP7 का उपयोग करें
नोट: संक्षेप संस्करण के लिए, उत्तर के अंत में TL; DR देखें।
पुराने तरीके
अपडेट : यहां बताए गए पुराने तरीकों में से एक को हटा दिया गया है। अन्य तरीकों पर स्पष्टीकरण के लिए अन्य उत्तरों का संदर्भ लें, यह यहां कवर नहीं किया गया है। वैसे, यदि यह उत्तर आपकी मदद नहीं करता है, तो आपको अपना सामान अपग्रेड करना चाहिए। PHP 5.6 समर्थन जनवरी 2019 में समाप्त हो गया है (अब भी PHP 7.0 और 7.1 समर्थित नहीं हैं)। अधिक जानकारी के लिए समर्थित संस्करण देखें ।
जैसा कि दूसरों ने उल्लेख किया है, PHP5 में (और PHP7 जैसे नए संस्करणों में भी) हम फ़ंक्शन नाम, उपयोग call_user_func()
और call_user_func_array()
(जो, व्यक्तिगत रूप से, मैं उन कार्यों से नफरत करता हूं), आदि के रूप में चर का उपयोग कर सकता हूं।
नए तरीके
PHP7 के रूप में, नए तरीके पेश किए गए हैं:
नोट:<something>
कोष्ठक के अंदर सब कुछ एक या अधिक अभिव्यक्तियों का <function_name>
अर्थ है कुछ बनाने के लिए, जैसे कि फ़ंक्शन नाम बनाने वाले भाव।
डायनामिक फंक्शन कॉल: फंक्शन नाम ऑन-द-फ्लाई
हम कोष्ठक के अंदर एक या एक से अधिक अभिव्यक्तियों का उपयोग केवल एक बार में फ़ंक्शन नाम के रूप में कर सकते हैं:
(<function_name>)(arguments);
उदाहरण के लिए:
function something(): string
{
return "something";
}
$bar = "some_thing";
(str_replace("_", "", $bar))(); // something
// Possible, too; but generally, not recommended, because makes your code more complicated
(str_replace("_", "", $bar))()();
नोट: हालाँकि, चारों ओर कोष्ठक हटाना str_replace()
कोई त्रुटि नहीं है, कोष्ठक डालने से कोड अधिक पठनीय हो जाता है। हालाँकि, आप कभी-कभी ऐसा नहीं कर सकते, जैसे कि .
ऑपरेटर का उपयोग करते समय । सुसंगत होने के लिए, मैं आपको कोष्ठकों को हमेशा लगाने की सलाह देता हूं।
डायनेमिक मेथड कॉल: मेथड नेम-ऑन-द-फ्लाई
गतिशील फ़ंक्शन कॉल की तरह, हम उसी तरह से कर सकते हैं जैसे विधि कॉल, कोष्ठक के बजाय घुंघराले ब्रेसिज़ से घिरा हुआ (अतिरिक्त रूपों के लिए, TL पर जाएं; DR अनुभाग);
$object->{<method_name>}(arguments);
$object::{<method_name>}(arguments);
इसे एक उदाहरण में देखें:
class Foo
{
public function another(): string
{
return "something";
}
}
$bar = "another thing";
(new Something())->{explode(" ", $bar)[0]}(); // something
डायनेमिक विधि कॉल: ऐरे सिंटैक्स
PHP7 में जोड़ा गया अधिक सुंदर तरीका निम्नलिखित है:
[<object>, <method_name>](arguments);
[<class_name>, <method_name>](arguments); // Static calls only
उदहारण के लिए:
class Foo
{
public function nonStaticCall()
{
echo "Non-static call";
}
public static function staticCall()
{
echo "Static call";
}
}
$x = new X();
[$x, "non" . "StaticCall"](); // Non-static call
[$x, "static" . "Call"](); // Static call
नोट: पिछले एक से अधिक इस पद्धति का उपयोग करने का लाभ यह है कि, आपको कॉल प्रकार (यानी यह स्थिर है या नहीं) के बारे में परवाह नहीं है।
अतिरिक्त उदाहरण: बेनामी वर्गों का उपयोग करना
चीजों को थोड़ा जटिल बनाते हुए, आप अनाम कक्षाओं और उपरोक्त सुविधाओं के संयोजन का उपयोग कर सकते हैं :
$bar = "SomeThing";
echo (new class {
public function something()
{
return 512;
}
})->{strtolower($bar)}(); // 512
टीएल; डीआर (निष्कर्ष)
आमतौर पर, PHP7 में, निम्नलिखित रूपों का उपयोग करना संभव है:
// Everything inside `<something>` brackets means one or more expressions
// to form something
// Dynamic function call
(<function_name>)(arguments)
// Dynamic method call on an object
$object->{<method_name>}(arguments)
$object::{<method_name>}(arguments)
// Dynamic method call on a dynamically-generated object
(<object>)->{<method_name>}(arguments)
(<object>)::{<method_name>}(arguments)
// Dynamic method call, statically
ClassName::{<method_name>}(arguments)
(<class_name>)::{<method_name>}(arguments)
// Dynamic method call, array-like (no different between static and non-static calls
[<object>, <method_name>](arguments)
// Dynamic method call, array-like, statically
[<class_name>, <method_name>](arguments)
ज्यादातर इस PHP पर आधारित बात करते हैं ।