我不知道问题(我问的方式)是否正确。我打开你的建议。我想知道下面的代码是如何工作的。如果你想要我能提供的任何细节,我想要。
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));
答案 0 :(得分:2)
PHP支持variable functions和variable 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
方法所做的那样。