开发者

Is there a function like the magic method __call() for global scope in php?

开发者 https://www.devze.com 2023-03-22 07:22 出处:网络
If a call is made to an undefined method in a class, the magic method __call can intercept the call, so I could handle the situation as I see fit:

If a call is made to an undefined method in a class, the magic method __call can intercept the call, so I could handle the situation as I see fit: http://www.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.methods

Is there any mechanism provided in php whereby I can do the same thing with functions in global scope. The point is best illustrated with code:

    <?php
    function return_some_array(){
      $a = array();
      //Do stuff to array
      return array();
    }

    // Now i call the function like so:
    $give_me_array = return_some_array();

    // But sometimes I want the array to not contain zeroes, nulls etc.
    // so I call: 
    $give_me_array_filtered = return_some_array_filtered();

    // But i haven't defined return_some_array_filtered() anywhere.
    // Instead I would like to do something like so: 
    function __magic_call($function_name_passed_automatically){ 
      preg_match('/(.*)_filtered$/', $function_name_passed_automatically, $matches);
      $function_name_that_i_defined_earlier_called_return_some_array = $matches[1];
      if($matches){
开发者_运维知识库        $result = call_user_func($function_name_that_i_defined_earlier_called_return_some_array);
        $filtered = array_filter($result);
        return $filtered;
      }
    }

    //So now, I could call return_some_other_array_filtered() and it would work provided I had defined return_some_other_array().
    //Or even Donkey_filtered() would work, provided I had defined Donkey() somewhere.
    ?>

Is this at all possible?


Not as such.

If you had made a static method like return_some_array_filtered::go() then you could use PHP5's autoload() facility to dynamically create the class and method. After creation the call proceeds as usual. You may want to implement callStatic() on that class. Beware dynamically creating a class from scratch (without include()) in PHP is non-trivial.

0

精彩评论

暂无评论...
验证码 换一张
取 消