您可以执行以下操作以产生相同的效果:
    <?php
class hooked{
    public $value;
    function __construct(){
        $this->value = "your function";
    }
    // Only called when function does not exist.
    function __call($name, $arguments){
        $reroute = array(
            "rerouted" => "hooked_function"
        );
        // Set the prefix to whatever you like available in function names.
        $prefix = "_";
        // Remove the prefix and check wether the function exists.
        $function_name = substr($name, strlen($prefix));
        if(method_exists($this, $function_name)){
            // Handle prefix methods.
            call_user_func_array(array($this, $function_name), $arguments);
        }elseif(array_key_exists($name, $reroute)){
            if(method_exists($this, $reroute[$name])){
                call_user_func_array(array($this, $reroute[$name]), $arguments);
            }else{
                throw new Exception("Function <strong>{$reroute[$name]}</strong> does not exist.\n");
            }
        }else{
            throw new Exception("Function <strong>$name</strong> does not exist.\n");
        }
    }
    function hooked_function($one = "", $two = ""){
        echo "{$this->value} $one $two";
    }
}
$hooked = new hooked();
$hooked->_hooked_function("is", "hooked. ");
// Echo's: "your function is hooked."
$hooked->rerouted("is", "rerouted.");
// Echo's: "our function is rerouted."
?>