352 of 410 menu

__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
    __callStatic metodu
  • var olmayan özelliklere erişimi yakalayan
    __get metodu
uzkarunlhi