Kaedah __call

Kaedah __call ialah kaedah ajaib dalam PHP yang dipanggil secara automatik apabila cuba mengakses kaedah kelas yang tidak wujud atau tidak boleh diakses. Parameter pertamanya menerima nama kaedah yang dipanggil, parameter kedua - tatasusunan argumen.

Sintaks

phppublic function __call(string $name, array $arguments) {
  // pelaksanaan
}

Contoh

Mari buat kelas dengan kaedah __call yang akan menangkap semua panggilan kepada kaedah yang tidak wujud:

php<?php
  class Test {
    public function __call($name, $args) {
      echo "Kaedah yang dipanggil: " . $name . "\n";
      echo "Argumen: ";
      print_r($args);
    }
  }
  
  $test = new Test();
  $test->nonExistentMethod('a', 'b', 123);
?>

Keputusan pelaksanaan kod:

phpCalled method: nonExistentMethod
Arguments: ['a', 'b', 123]

Contoh

Mari laksanakan pendelegat kaedah mudah menggunakan __call:

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("Method $name not found");
    }
  }
  
  $math = new Math();
  echo $math->add(2, 3);
?>

Keputusan pelaksanaan kod:

php5

Lihat juga

  • kaedah __callStatic,
    yang menangkap panggilan kaedah statik
  • kaedah __get,
    yang menangkap akses kepada sifat yang tidak wujud