__call মেথড

__call মেথডটি PHP-তে একটি ম্যাজিক মেথড, যা একটি ক্লাসের অস্তিত্বহীন বা অ্যাক্সেসযোগ্য নয় এমন মেথডে অ্যাক্সেস করার চেষ্টা করলে স্বয়ংক্রিয়ভাবে কল হয়। এটি প্রথম প্যারামিটার হিসেবে কল করা মেথডের নাম গ্রহণ করে, এবং দ্বিতীয় প্যারামিটার হিসেবে আর্গুমেন্টগুলির একটি অ্যারে গ্রহণ করে।

সিনট্যাক্স

phppublic function __call(string $name, array $arguments) {
  // বাস্তবায়ন
}

উদাহরণ

আসুন একটি ক্লাস তৈরি করি যাতে __call মেথড রয়েছে, যা সকল অস্তিত্বহীন মেথডের কলকে ইন্টারসেপ্ট করবে:

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

কোড 실행ের ফলাফল:

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

কোড 실행ের ফলাফল:

php5

আরও দেখুন

  • __callStatic মেথড,
    যা স্ট্যাটিক মেথড কলগুলিকে ইন্টারসেপ্ট করে
  • __get মেথড,
    যা অস্তিত্বহীন প্রপার্টিতে অ্যাক্সেসকে ইন্টারসেপ্ট করে