دو مجیک متد مهم دیگر در
php متد های __call() و __callStatic() هستند.این متدها به شما اجازه میدهند تا به طور پویا و در زمان اجرا، تماس با متدهای نامعتبر یا غیرموجود یک کلاس را کنترل کنید.
متد
__call() : این متد برای تماس با متدهای نامعتبر یا غیرموجود در یک شئ به کار میرود. وقتی یک متد نامعتبر فراخوانی میشود، متد __call() فراخوانی میشود و شما میتوانید عملیات مربوط به این فراخوانی را در آن تعریف کنید.متد
__call() دو پارامتر دریافت میکند: نام متد فراخوانی شده و آرگومانهای متد. شما میتوانید با استفاده از این دو پارامتر عملیات دلخواه خود را انجام دهید.مثال :
class ّFruit {
public function __call($name, $arguments) {
echo "Calling method '$name' with arguments: " . implode(', ', $arguments);
}
}
$obj = new Fruit();
$obj->banana('yellow', 'sweet');
Result:Calling method 'banana' with arguments: yellow, sweet
در مثال بالا از کلاس
Fruit متدی به نام banana صدا زده شده که وجود ندارد، در نتیجه مجیک متد __call صدا زده می شود و عملیاتی را انجام می دهد.در این مثال تنها نام متد و آرگومان های آن چاپ شده ولی در استفاده های جدی تر میتوان بسته به نام صدا زده شده متدی دیگر را فراخوانی کرد.
مثال:
class ّFruit {
public function __call($name, $arguments) {
if ($name === 'banana'){
banana($arguments);
}elsif ($name === 'apple'){
apple($arguments);
}
}
}
$obj = new Fruit();
$obj->banana('yellow', 'sweet');
Result:Calling method 'banana' with arguments: yellow, sweet
$obj->apple('red', 'sweet');
Result:Calling method 'apple' with arguments: red, sweet
در مثال بالا بسته به نام متد صدا زده که تعریف نشده است تابعی صدا زده می شود، به عنوان مثال اگر متد
banana را صدا بزنیم تابعی به نام banana فراخوانی می شود، و استفاده های کاربردی تر....متد
__callStatic() : این متد مشابه __call() عمل میکند، با این تفاوت که برای تماس با متدهای استاتیک نامعتبر یا غیرموجود در یک کلاس استفاده میشود. وقتی یک متد استاتیک نامعتبر فراخوانی میشود، متد __callStatic() فراخوانی میشود و شما میتوانید عملیات مربوط به این فراخوانی را در آن تعریف کنید. متد
__callStatic() دو پارامتر دریافت میکند: نام متد فراخوانی شده و آرگومانهای متد. شما میتوانید با استفاده از این دو پارامتر عملیات دلخواه خود را انجام دهید.مثال:
class Fruit {
public static function __callStatic($name, $arguments) {
echo "Calling static method '$name' with arguments: " . implode(', ', $arguments);
}
}
Fruit::banana('yellow', 'sweet');
Result:Calling static method 'banana' with arguments: yellow, sweet
بقیه موارد مانند متد
__call می باشند..