TGViewer
| کانال توسعه‌دهندگان PHP | | کانال توسعه‌دهندگان PHP | @developixphp · 1.68K subscribers
Post #31 651
مجیک متدهای __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
  • ❤ 6
  • 👍 3
  • 🔥 1
More from @developixphp
  1. Sep 26, 2026این کد موقع اجرا چه خروجی‌ای می‌ده و مشکلش کجاست؟ 🔖 #PHP #پی_اچ_پی 👤 Developix 💎 Channe…
  2. Sep 25, 2026🔥 پکیج: قراردادهای ترجمه سیمفونی اگر کد PHP را برای چندزبانگی می‌نویسید، بهتر است منطق بر…
  3. Sep 16, 2026🚀 ‏LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
  4. Sep 11, 2026ارسال ایمیل تأیید ثبت‌نام، بازیابی رمز عبور یا نوتیفیکیشن سفارش، تقریباً توی هر پروژه‌ PHP…
  5. Sep 10, 2026برنامه نویسی سوکت در PHP بخش اول عبارت دیگر در ارتباط های غیر سوکت برای ارسال یک پالس از س…
  6. Aug 31, 2026🔥 پکیج: استاندارد PSR-11 برای Container استاندارد PSR-11 فقط یه interface مشترک برای Cont…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →