আমি যাদু পদ্ধতি __call ব্যবহার করে একটি পরীক্ষা করেছি। আমার এটি পোস্ট করা উচিত কিনা তা নিশ্চিত নয় (কারণ "অন্যান্য উত্তর এবং মন্তব্যে সমস্ত" ম্যাজিক মেথড ব্যবহার করবেন না ") সতর্কতা থাকলেও আমি এটিকে এখানে রেখে দেব .. যদি কারওর পক্ষে এটি কার্যকর মনে হয়।
public function __call($_name, $_arguments){
$action = substr($_name, 0, 4);
$varName = substr($_name, 4);
if (isset($this->{$varName})){
if ($action === "get_") return $this->{$varName};
if ($action === "set_") $this->{$varName} = $_arguments[0];
}
}
আপনার ক্লাসে কেবল সেই পদ্ধতিটি জুড়ুন, এখন আপনি টাইপ করতে পারেন:
class MyClass{
private foo = "bar";
private bom = "bim";
// ...
// public function __call(){ ... }
// ...
}
$C = new MyClass();
// as getter
$C->get_foo(); // return "bar"
$C->get_bom(); // return "bim"
// as setter
$C->set_foo("abc"); // set "abc" as new value of foo
$C->set_bom("zam"); // set "zam" as new value of bom
এইভাবে আপনি যদি আপনার শ্রেণীর সমস্ত কিছু বিদ্যমান থাকে তা সেট / সেট করতে পারেন, যদি আপনার কেবলমাত্র কয়েকটি নির্দিষ্ট উপাদানের প্রয়োজন হয় তবে আপনি ফিল্টার হিসাবে "শ্বেতলিস্ট" ব্যবহার করতে পারেন।
উদাহরণ:
private $callWhiteList = array(
"foo" => "foo",
"fee" => "fee",
// ...
);
public function __call($_name, $_arguments){
$action = substr($_name, 0, 4);
$varName = $this->callWhiteList[substr($_name, 4)];
if (!is_null($varName) && isset($this->{$varName})){
if ($action === "get_") return $this->{$varName};
if ($action === "set_") $this->{$varName} = $_arguments[0];
}
}
এখন আপনি কেবল "ফু" এবং "ফি" পেতে / সেট করতে পারবেন।
আপনার বারগুলিতে অ্যাক্সেসের জন্য কাস্টম নামগুলি নির্ধারণ করতে আপনি সেই "শ্বেত তালিকা" ব্যবহার করতে পারেন।
উদাহরণ স্বরূপ,
private $callWhiteList = array(
"myfoo" => "foo",
"zim" => "bom",
// ...
);
সেই তালিকার সাহায্যে আপনি এখন টাইপ করতে পারেন:
class MyClass{
private foo = "bar";
private bom = "bim";
// ...
// private $callWhiteList = array( ... )
// public function __call(){ ... }
// ...
}
$C = new MyClass();
// as getter
$C->get_myfoo(); // return "bar"
$C->get_zim(); // return "bim"
// as setter
$C->set_myfoo("abc"); // set "abc" as new value of foo
$C->set_zim("zam"); // set "zam" as new value of bom
।
।
।
এখানেই শেষ.
দস্তাবেজ:
__call () একটি অবজেক্ট প্রসঙ্গে অ্যাক্সেসযোগ্য পদ্ধতিতে অনুরোধ করার সময় ট্রিগার করা হয়।