Magic method __call() like function for global scope

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • varunajani
    New Member
    • Jul 2008
    • 2

    Magic method __call() like function for global scope

    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.o verloading.php# language.oop5.o verloading.meth ods

    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:

    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?
  • Dormilich
    Recognized Expert Expert
    • Aug 2008
    • 8694

    #2
    Is there any mechanism provided in php whereby I can do the same thing with functions in global scope.
    nope, there isn‘t.

    Comment

    Working...