Laravel 大致原理

<?php

interface IMessage{
    public function send();
}

class Message implements IMessage{
    public function send(){
        echo 'send';
    }
}

class ControllerA
{
    public function __construct()
    {
        echo '实例化';
    }
    public function index(IMessage $mes)
    {
        $mes->send();
    }
}

class Container{ //psr7好像定义了 容器规范

    private $arr=[];
    //\Closure
    public function bind($name, $fun)
    {
        $this->arr[$name]=$fun;
    }

    public function make($name)
    {
        $fun=$this->arr[$name];
        return call_user_func($fun);
    }
}

class Route{  //为了省事 本身 Route 使用魔术方法__callStatic实现 非静态方法
    private static $arr=[];
    public static function get($name,$controller)
    {
        self::$arr[$name]=$controller;
        self::invoke(); 
    }

    public static function  invoke()
    {
        global $container;
        $controller=self::$arr['callindex'];
        list($controllerClass,$method)=explode('@',$controller);
        //反射
        $reclass=new ReflectionClass($controllerClass);// 获取反射类
        $method=$reclass->getMethod($method);//index 方法
        $param=$method->getParameters(); //index 方法的所有参数
        $methodparamClassName=$param[0]->getClass()->getName(); //Imessage 第一个参数的 类名
        $paramInstance=$container->make($methodparamClassName);// 从容器中取这个类名绑定的实例

        $controllerInstance=$reclass->newInstance();//$a=new ControllerA //输出实例化
        $method->invoke($controllerInstance,$paramInstance);//执行$a->index  //输出  send

    }
}
$container=new Container();
$container->bind('IMessage',function(){
    return new Message();
});
Route::get('callindex','ControllerA@index'); //main start

/**
$reclass=new ReflectionClass('ControllerA');// 获取反射类
$method=$reclass->getMethod('index');//index 方法
$param=$method->getParameters(); //index 方法的所有参数
$methodparamClassName=$param[0]->getClass()->getName(); //Imessage 第一个参数的 类名
$paramInstance=$container->make('IMessage');// 从容器中取这个类名绑定的实例

$controllerInstance=$reclass->newInstance();//$a=new ControllerA
$method->invoke($controllerInstance,$paramInstance);//执行$a->index

**/
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

你这个代码稀烂的一笔,还发出来,还取个这个标题

7年前 评论

能说明问题就好!

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!