__call Metodu
__call metodu, PHP'de bir sınıfta var olmayan veya erişilemeyen bir metot çağrıldığında otomatik olarak tetiklenen büyülü bir metottur. İlk parametresi çağrılan metodun adını, ikinci parametresi ise argümanların bir dizisini alır.
Sözdizimi
public function __call(string $name, array $arguments) {
// uygulama
}
Örnek
__call metoduna sahip bir sınıf oluşturalım, bu sınıf var olmayan tüm metot çağrılarını yakalayacak:
<?php
class Test {
public function __call($name, $args) {
echo "Çağrılan metot: " . $name . "\n";
echo "Argümanlar: ";
print_r($args);
}
}
$test = new Test();
$test->nonExistentMethod('a', 'b', 123);
?>
Kodun çalıştırılmasının sonucu:
Çağrılan metot: nonExistentMethod
Argümanlar: ['a', 'b', 123]
Örnek
__call kullanarak basit bir metot delegetörü uygulayalım:
<?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("$name metodu bulunamadı");
}
}
$math = new Math();
echo $math->add(2, 3);
?>
Kodun çalıştırılmasının sonucu:
5
Ayrıca Bakınız
-
statik metot çağrılarını yakalayan
__callStaticmetodu -
var olmayan özelliklere erişimi yakalayan
__getmetodu