纤细的路由和控制器(这个 __call 函数如何从路由调用以及为什么 $this->request 使用 $request= 的 insted)

slim routing and controller (how this __call function is calling from route and why $this->request is using insted of $request=)

伙计们请帮助我理解这些代码

图1中的路由器正在使用info方法调用

正如您在 AccountController 中看到的那样,已经存在 info() 那么为什么 __call() 这个魔术函数正在调用

这些参数是什么 $this->request ,$this->response

我们可以像

一样保存所有数据

$request = $args[0]; $response = $args[1]; $属性 = $args[2];

为什么使用 $this-> syntex 这行 $this->$name();

是什么意思

Router.php

<?php

$app->get('/account', '\App\Controller\AccountController:info');

?>

AccountController.php

<?php
/**
 * AccountController
 * @package Controllers
 */
namespace App\Controller;


final class AccountController extends \App\Core\Controller
{

    protected function info()
    {

        echo $this->client_id;

    }
}

Controller.php

 <?php

namespace App\Core;


 class Controller
{


  public function __call($name,$args) { //line 25
        //echo "Call method : ".$name;
        $this->request = $args[0];
        $this->response = $args[1];
        $this->attributes = $args[2];

        //print_r($this->attributes);
        $this->client_id = $this->request->getAttribute("client_id");



              $this->$name();

    }

}


?>

Router.php 在 AccountController.php 上调用了您的 info() 方法 但是您的方法受到保护并且 info() 方法无法从 class 中访问 所以 __call() 魔术方法已使用 $name$args 参数调用。

$name => 值为方法名。 "info".
$args => 响应、请求、属性值数组

$this => 它是对当前object的引用,在object-oriented代码中最常用。 What does the variable $this mean in PHP?

request,response,attributes,client_id 它们是控制器的变量 class 并且可以在控制器的每个方法上访问 class children。喜欢 $this->client_id 在你的 AccountController class.

    $this->request = $args[0];
    $this->response = $args[1];
    $this->attributes = $args[2];
    $this->client_id = $this->request->getAttribute("client_id");

$this->$name();动态调用方法

PHP OOP

$this 引用它自己并且 $this->$name();

将调用作为 $name in __call() 函数接收的函数的方法