为什么从__call()返回数组的返回方法?

时间:2012-03-15 12:00:19

标签: php class

我有一个使用__call()的类:

public function __call($method, $args){
     $method = "_".$method;
     if (method_exists($this, $method)) {
        try {
            return $this->$method($args);
        }
        catch (Validation_exception $e) {
            $this->exceptions[] = $e->getMessage();
            return;
        }
     }
}

但即使我有一个返回字符串的方法,这将返回一个数组:

protected function _return_string(){
    return "string"; 
}

如果我这样做:
    echo $ myclass-> return_string();     print_r($ myclass-> return_string());

输出:
    阵列()
    数组([0] =>“字符串”)

为什么它会返回一个数组??

1 个答案:

答案 0 :(得分:0)

class myClass {
    protected function _return_string($arg){
        return is_array($arg) ? $arg[0] : $arg;
    }

    public function __call($method, $args){
        $method = "_".$method;
        if (method_exists($this, $method)) {
            try {
                return $this->$method($args); // $args passed as an array here
            }
            catch (Validation_exception $e) {
                $this->exceptions[] = $e->getMessage();
                return;
            }
         }
    }
}

$foo = new myClass();
echo $foo->__call('return_string','Hello'); // Prints "Hello" 
echo $foo->return_string(' World'); //Prints "World"

//输出屏幕" Hello World"

注意:返回$ this-> $ method($ args)将$ args作为数组传递。