__call و __callStatic در PHP برای دستکاری نحوه پاسخگویی کلاسها به فراخوانی متدهایی که به صورت مستقیم تعریف نشدهاند یا اصلا وجود ندارند، استفاده میشوند. این دو متد به شما اجازه میدهند تا رفتار انعطاف پذیرتری را در کلاسهای خود ایجاد کنید.مجیک متد
__call:زمانی فراخوانی میشود که به متدی غیر استاتیک در یک شیء دسترسی پیدا میکنید که وجود ندارد یا قابل دسترسی نیست.
این متد دو ورودی که به ترتیب نام متد فراخوانی شده و آرگومان های متد فراخوانی شده هستند را دریافت میکند.
ساختار آن به صورت زیر است:
public function __call($name, $arguments)
{
}
مثال:
class Person {
private $data = [
"name" => "John",
"age" => 30
];
public function __call($method, $params) {
if (array_key_exists($method, $this->data)) {
return $this->data[$method];
} else {
return "Method $method does not exist!";
}
}
}
$person = new Person();
echo $person->name(); // Outputs: John
echo $person->age(); // Outputs: 30
echo $person->height(); // Outputs: Method height does not exist!در این مثال، کلاس Person دارای یک آرایه خصوصی $data است که حاوی اطلاعات است. وقتی که سعی میکنید به متدی دسترسی پیدا کنید که مستقیماً تعریف نشدهاست، متد
__call فراخوانی میشود.در این مثال همانطور که می بینید متد های name و age و height تعریف نشده اند ولی به واسطه متد
__call مدیریت میشوند. این متد چک میکند که آیا نام متد فراخوانی شده به عنوان کلید در آرایه $data وجود دارد یا خیر. اگر وجود داشته باشد، مقدار مربوطه را برمیگرداند و اگر نباشد، پیام خطا میدهد.
———
مجیک متد
__callStatic:مجیک متد
__callStatic مشابه __call است، اما برای متدهای استاتیک که وجود ندارند یا قابل دسترسی نیستند فراخوانی میشود.این متد نیز همانند
__call دو ورودی که به ترتیب نام متد فراخوانی شده و آرگومان های متد فراخوانی شده هستند را دریافت میکند.ساختار آن به صورت زیر است:
public static function __callStatic($name, $arguments)
{
}
مثال:
class Utility {
private static $data = [
"pi" => 3.14159,
"e" => 2.71828
];
public static function __callStatic($method, $params) {
if (array_key_exists($method, self::$data)) {
return self::$data[$method];
} else {
return "Static method $method does not exist!";
}
}
}
echo Utility::pi(); // Outputs: 3.14159
echo Utility::e(); // Outputs: 2.71828
echo Utility::golden(); // Outputs: Static method golden does not exist!در این مثال، کلاس Utility دارای یک آرایه خصوصی استاتیک $data است. وقتی به متد استاتیکی که تعریف نشده دسترسی پیدا میکنید،
__callStatic فعال میشود. این متد بررسی میکند که آیا نام متد به عنوان کلید در $data وجود دارد. اگر بله، مقدار مربوطه را برمیگرداند و اگر نه، پیام خطا میدهد.مجیک متدهای
__call و __callStatic در PHP برای مدیریت دسترسی به متدهایی که به صورت مستقیم در کلاس تعریف نشدهاند بسیار کاربردی هستند. این متدها اجازه میدهند که رفتار کلاس را در هنگام فراخوانی متدهای ناموجود کنترل کنید، و به شما امکان میدهند به شیوهای انعطافپذیر به آنها پاسخ دهید. این قابلیت خصوصاً مفید است در طراحی کلاسهایی که به نوعی به دادههای دینامیکی کار میکنند یا نیاز به رابطهای برنامهنویسی انعطافپذیر دارند ( مانند کلاسی برای استفاده از متد های API تلگرام به جای تعریف همه متد ها ).👤 AmirHossein
💎 Channel: @DevelopixPHP