тонкая маршрутизация и контроллер (как эта функция __call вызывается из маршрута и почему $ this-> request использует insted of $ request =) - PullRequest
0 голосов
/ 31 декабря 2018

ребята, пожалуйста, помогите мне разобраться в этом коде

на рисунке 1 маршрутизатор вызывает с помощью информационного метода

, как вы можете видеть в AccountController, уже есть информация (), тогда почему __call () эта магическая функция вызывает

, и каковы эти параметры: $ this-> request, $ this-> response

мы можем сохранить все данные как

$ request =$ арг [0];$ response = $ args [1];$ attribute = $ args [2];

почему используется синтаксис $ this-> что означает эта строка $ 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();

    }

}


?>

Ответы [ 2 ]

0 голосов
/ 04 января 2019

$ это относится к себе, и $this->$name();

будет вызывать метод для вашей функции, который получил как $name in __call() function

0 голосов
/ 31 декабря 2018

Router.php вызвал ваш info() метод для AccountController.php Но ваш метод защищен и метод info() недоступен вне класса, поэтому магический метод __call() был вызван с параметрами $name и $args.

$ name => значение - это имя метода."info".
$ args => значение массива ответа, запроса, атрибутов

$this => Это ссылка на текущий объект, чаще всего она используется в объектно-ориентированном коде. Что означает переменная $ this в PHP?

request, response, attributes, client_id они являются переменными класса контроллера и доступны для каждого методаКонтролер класса детей.например, $this->client_id в вашем AccountController классе.

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

$this->$name(); Этот способ для вызова методов с использованием методов dynnaic.

OOP PHP

...