__call metodu
__call metodu PHP-də sehrli metod olub, klasın mövcud olmayan və ya əlçatmaz metoduna müraciət cəhdi zamanı avtomatik çağırılır. O, birinci parametrdə çağırılan metodun adını, ikinci parametrdə isə arqumentlər massivini qəbul edir.
Sintaksis
public function __call(string $name, array $arguments) {
// realizasiya
}
Nümunə
Gəlin __call metodu olan bir klas yaradaq, hansı ki, bütün mövcud olmayan metod çağırışlarını interception edəcək:
<?php
class Test {
public function __call($name, $args) {
echo "Called method: " . $name . "\n";
echo "Arguments: ";
print_r($args);
}
}
$test = new Test();
$test->nonExistentMethod('a', 'b', 123);
?>
Kodun icrasının nəticəsi:
Called method: nonExistentMethod
Arguments: ['a', 'b', 123]
Nümunə
Gəlin __call vasitəsilə sadə metod delegatoru realizasiya edək:
<?php
class Calculator {
public function add($a, $b) {
return $a + $b;
}
}
class Math {
private $calculator;
public function __construct() {
$this->calculator = new Calculator();
}
public function __call($name, $args) {
if (method_exists($this->calculator, $name)) {
return call_user_func_array(
[$this->calculator, $name],
$args
);
}
throw new Exception("Method $name not found");
}
}
$math = new Math();
echo $math->add(2, 3);
?>
Kodun icrasının nəticəsi:
5
Həmçinin bax
-
__callStaticmetodu,
hansı ki, statik metod çağırışlarını interception edir -
__getmetodu,
hansı ki, mövcud olmayan xüsusiyyətlərə müraciətləri interception edir