__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
phppublic 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<?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:
phpÇağrılan metot: nonExistentMethod
Argümanlar: ['a', 'b', 123]
Örnek
__call kullanarak basit bir metot delegetörü uygulayalım:
php<?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:
php5
Ayrıca Bakınız
-
statik metot çağrılarını yakalayan
__callStaticmetodu -
var olmayan özelliklere erişimi yakalayan
__getmetodu