-2

guys please help me to understand these code

in picture 1 router is calling with info method

as you can see in AccountController there is already info() is present then why __call() this magic function is calling

and what are these parameters is $this->request ,$this->response

we can save all data like

$request = $args[0]; $response = $args[1]; $attributes = $args[2];

why $this-> syntex is use what is the meaning of this line $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 Answers2

0

Router.php called your info() method on AccountController.php But your method is protected and info() method not accessible out of the class so __call() magic method has been called with $name and $args parameters.

$name => value is method name. "info".
$args => value array of response,request,attributes

$this => It's a reference to the current object, it's most commonly used in the object-oriented code. What does the variable $this mean in PHP?

request,response,attributes,client_id they are variables of the controller class and accessible on each method of controller class children. like $this->client_id in your AccountController class.

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

$this->$name(); This dymnaic way for call the methods.

PHP OOP

0

$this refers to itself and $this->$name();

will calling method to your function that received as $name in __call() function

Dumi
  • 1,414
  • 4
  • 21
  • 41
Rahul
  • 1