函数返回php中的另一个函数

时间:2016-11-15 15:56:17

标签: php class oop

我不知道问题(我问的方式)是否正确。我打开你的建议。我想知道下面的代码是如何工作的。如果你想要我能提供的任何细节,我想要。

public function processAPI() {
    if (method_exists($this, $this->endpoint)) {
        return $this->_response($this->{$this->endpoint}($this->args));
    }
    return $this->_response("No Endpoint: $this->endpoint", 404);
}

private function _response($data, $status = 200) {
    header("HTTP/1.1 " . $status . " " . $this->_requestStatus($status));
    return json_encode($data);
}
private function _requestStatus($code) {
    $status = array(  
        200 => 'OK',
        404 => 'Not Found',   
        405 => 'Method Not Allowed',
        500 => 'Internal Server Error',
    ); 
    return ($status[$code])?$status[$code]:$status[500]; 
}
/**
 * Example of an Endpoint
 */
 protected function myMethod() {
    if ($this->method == 'GET') {
        return "Your name is " . $this->User->name;
    } else {
        return "Only accepts GET requests";
    }
 }

此处$this->endpoint is 'myMethod' (a method I want to execute)

我在url中传递了我想要执行的方法。该函数捕获请求进程,然后调用确切的方法。我想知道它是如何运作的。特别是这一行。

return $this->_response($this->{$this->endpoint}($this->args));

1 个答案:

答案 0 :(得分:2)

PHP支持variable functionsvariable variables

当它在processApi

中到达你的声明时
return $this->_response($this->{$this->endpoint}($this->args));

PHP将解析您的端点变量,我们将其替换为示例中的myMethod

return $this->_response($this->myMethod($this->args));

正如您所看到的,我们现在正在调用您班级中存在的方法。如果将端点设置为不存在的端点,则会产生错误。

如果myMethod返回一个字符串,例如my name is bob,那么一旦$this->myMethod($this->args)执行PHP,就会将该值解析为$this->_response()的参数,从而导致:

return $this->_response('my name is bob');

在该事件链之后,processAPI()方法将最终返回该JSON编码的字符串,就像_response方法所做的那样。