পিএইচপি-র জন্য একই শ্রেণিতে কোনও পদ্ধতিকে গতিশীলভাবে ডাকার কোনও উপায় আছে কি? আমার বাক্য গঠন ঠিক নেই, তবে আমি এর মতো কিছু করতে চাইছি:
$this->{$methodName}($arg1, $arg2, $arg3);
পিএইচপি-র জন্য একই শ্রেণিতে কোনও পদ্ধতিকে গতিশীলভাবে ডাকার কোনও উপায় আছে কি? আমার বাক্য গঠন ঠিক নেই, তবে আমি এর মতো কিছু করতে চাইছি:
$this->{$methodName}($arg1, $arg2, $arg3);
উত্তর:
এটি করার একাধিক উপায় রয়েছে:
$this->{$methodName}($arg1, $arg2, $arg3);
$this->$methodName($arg1, $arg2, $arg3);
call_user_func_array(array($this, $methodName), array($arg1, $arg2, $arg3));
এমনকি আপনি প্রতিচ্ছবি এপিআই http://php.net/manual/en/class.reflection.php ব্যবহার করতে পারেন
call_user_func_arrayএটি আপনার জন্য একটি।
call_user_func_array($this->$name, ...)ভাবছিলাম কেন এটি কাজ করবে না!
কেবল ধনুর্বন্ধনী বাদ দিন:
$this->$methodName($arg1, $arg2, $arg3);
আপনি পিএইচপিতে ওভারলোডিং : ওভারলোডিং ব্যবহার করতে পারেন
class Test {
private $name;
public function __call($name, $arguments) {
echo 'Method Name:' . $name . ' Arguments:' . implode(',', $arguments);
//do a get
if (preg_match('/^get_(.+)/', $name, $matches)) {
$var_name = $matches[1];
return $this->$var_name ? $this->$var_name : $arguments[0];
}
//do a set
if (preg_match('/^set_(.+)/', $name, $matches)) {
$var_name = $matches[1];
$this->$var_name = $arguments[0];
}
}
}
$obj = new Test();
$obj->set_name('Any String'); //Echo:Method Name: set_name Arguments:Any String
echo $obj->get_name();//Echo:Method Name: get_name Arguments:
//return: Any String
এছাড়াও আপনি ব্যবহার করতে পারেন call_user_func()এবংcall_user_func_array()
আপনি যদি পিএইচপি-র কোনও শ্রেণীর মধ্যে কাজ করছেন, তবে আমি পিএইচপি 5-তে ওভারলোডযুক্ত __call ফাংশনটি ব্যবহার করার পরামর্শ দেব। আপনি এখানে রেফারেন্স খুঁজে পেতে পারেন ।
মূলত __call গতিশীল ফাংশনগুলির জন্য করে __ সেট এবং __get ওও পিএইচপি 5 এর চলকগুলির জন্য কী করে।
এত বছর পরেও বৈধ! নিশ্চিত করুন যে আপনি ব্যবহারকারীর সংজ্ঞায়িত সামগ্রী যদি $ মেথডনামটি ছাঁটাই করেন। আমি লক্ষ্য করি না এটির একটি অগ্রণী স্থান না পাওয়া পর্যন্ত আমি এই> এই -> $ পদ্ধতি নামটি কাজ করতে পারি না।
আমার ক্ষেত্রে.
$response = $client->{$this->requestFunc}($this->requestMsg);
পিএইচপি সোপ ব্যবহার করা হচ্ছে।
আপনি ক্লোজারটি ব্যবহার করে একটি পদ্ধতি একটি একক ভেরিয়েবলে সঞ্চয় করতে পারেন:
class test{
function echo_this($text){
echo $text;
}
function get_method($method){
$object = $this;
return function() use($object, $method){
$args = func_get_args();
return call_user_func_array(array($object, $method), $args);
};
}
}
$test = new test();
$echo = $test->get_method('echo_this');
$echo('Hello'); //Output is "Hello"
সম্পাদনা: আমি কোডটি সম্পাদনা করেছি এবং এখন এটি পিএইচপি 5.3 এর সাথে সামঞ্জস্যপূর্ণ। এখানে আরও একটি উদাহরণ