__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