TGViewer
| کانال توسعه‌دهندگان PHP | | کانال توسعه‌دهندگان PHP | @developixphp · 1.68K subscribers
Post #37 839
مجیک متد __invoke در PHP به شیء اجازه می‌دهد تا همچون یک تابع عمل کند. یعنی وقتی شی‌ای از کلاسی که این مجیک متد در آن تعریف شده است، ساخته می‌شود، می‌تواند مستقیماً فراخوانی شود.

مثال:
فرض کنید می‌خواهیم یک کلاس داشته باشیم که عملیات ریاضی را انجام دهد. می‌توانیم __invoke را استفاده کنیم تا بتوانیم شیء را مانند یک تابع فراخوانی کنیم و یک عملیات را انجام دهیم.

class MathOperation {
private $operand;

public function __construct($operand) {
$this->operand = $operand;
}

public function __invoke($number) {
return $number * $this->operand;
}
}

$double = new MathOperation(2);
echo $double(10); // Output: 20


در این مثال، شیء $double همچون یک تابع فراخوانی شده و عدد 10 را دو برابر می‌کند.

———

مجیک متد __set_state در زمانی که می‌خواهیم نمایش خروجی یک شیء را با استفاده از تابع var_export کنترل کنیم، به کار می‌رود. این مجیک متد باید به صورت استاتیک تعریف شود و برای بازسازی نمونه‌های کلاس‌ها استفاده می‌شود. وقتی var_export بر روی یک شیء فراخوانی می‌شود و کلاس آن شیء دارای مجیک متد __set_state است، خروجی که تولید می‌شود قابل استفاده برای بازسازی شیء خواهد بود.

مجیک متد __set_state یک آرایه از متغیرها را دریافت کند و باید یک شیء از کلاس را برگرداند. این آرایه معمولاً شامل تمامی ویژگی‌های شیء است که با دسترسی‌های مختلف تعریف شده‌اند.

مثال:
در این مثال، ما یک کلاس ساده به نام Person را تعریف می‌کنیم که دارای دو ویژگی name و age است و مجیک متد __set_state را برای آن تعریف می‌کنیم:

class Person {
public $name;
public $age;

public static function __set_state($an_array) {
$obj = new Person;
$obj->name = $an_array['name'];
$obj->age = $an_array['age'];
return $obj;
}
}

$person = new Person;
$person->name = 'John';
$person->age = 30;

$exported = var_export($person, true);

eval('$restored_person = ' . $exported . ';');
echo $restored_person->name; // Output: John
echo $restored_person->age; // Output: 30


مجیک متد __set_state برای بازسازی شیء از آرایه‌ای که توسط var_export تولید شده استفاده می‌کند.
تابع var_export برای تولید یک رشته است که نمایش دهنده کد PHP برای بازسازی شیء Person است.
با استفاده از eval شیء جدیدی از رشته خروجی var_export ساخته می‌شود و می‌توان مقادیر ویژگی‌های آن را استخراج کرد.

👤 AmirHossein

💎 Channel: @DevelopixPHP
  • ❤ 5
  • 👍 2
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 →