__call әдісі

__call әдісі PHP-тегі сиқырлы әдіс болып табылады, ол кластағы жоқ немесе қол жетімсіз әдіске жүгіну әрекеті кезінде автоматты түрде шақырылады. Ол бірінші параметр ретінде шақырылатын әдістің атауын, екінші параметр ретінде аргументтер жиынын қабылдайды.

Синтаксис

phppublic function __call(string $name, array $arguments) {
  // іске асыру
}

Мысал

__call әдісі бар класс жасайық, ол барлық жоқ әдістердің шақыруларын қарайды:

php<?php
  class Test {
    public function __call($name, $args) {
      echo "Шақырылған әдіс: " . $name . "\n";
      echo "Аргументтер: ";
      print_r($args);
    }
  }
  
  $test = new Test();
  $test->nonExistentMethod('a', 'b', 123);
?>

Кодты орындау нәтижесі:

phpШақырылған әдіс: nonExistentMethod
Аргументтер: ['a', 'b', 123]

Мысал

__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("$name әдісі табылмады");
    }
  }
  
  $math = new Math();
  echo $math->add(2, 3);
?>

Кодты орындау нәтижесі:

php5

Сондай-ақ қараңыз

  • __callStatic әдісі,
    ол статикалық әдістердің шақыруларын қарайды
  • __get әдісі,
    ол жоқ сипаттарға жүгінулерді қарайды