Laravel 框架源码研究(三)近期学习总结

本来打算自己写一系列分析文章,不过人家有了,而且写得很好,拿来给有需要的人参考

优秀参考资料

  1. 核心设计版分析博客 Laravel源码分析
  2. 运行流程版分析博客 Laravel源码分析
  3. 分析视频 Laravel源码分析视频

这个三个资料,最好的,当然是视频版,可惜,只有一讲,后续作者没有更新。然后就是核心设计版,对我这种没怎么研究过源码的小白,很友好。然后是运行流程版,相当于对着主要流程讲了一遍。建议在看懂简版后,再阅读。

领会到的Laravel源码精要思想

容器相关思想

  1. 将变量(比如 类 ,实例化类的方法 ,实例化后的单例模式的实例)存放在容器类中;
  2. 实现依赖注入,解决代码中写new 某类的问题 (因为容器中,存放了实例化某类的方法(闭包))

单独使用Laravel的容器类,或者说如何在自己的项目中,使用Laravel容器类 参考:单独使用Laravel容器

// 以composer方式  引入容器包   省略
class Application extends Illuminate\Container\Container{
    public function __construct()
    {
        static::setInstance($this);
    }

    //启动静态代理
    public function withFacades($aliases = true, $userAliases = [])
    {
        Illuminate\Support\Facades\Facade::setFacadeApplication($this);
    }
}

//app()这个函数太常被定义了, 所以另外起了个名字
function center_app($abstract = null, array $parameters = [])
{
    if (is_null($abstract)) {
    //辅助函数返回容器本身
        return Illuminate\Container\Container::getInstance();
    }
    //返回别名对应的实例
    return Illuminate\Container\Container::getInstance()->make($abstract, $parameters);
}


$app=new Application();

// app()->withFacades();//处理静态代理     

$app->bind('redis1',function(){
    return new Predis\Client([],['prefix'=>'shrimp']);
});//注册一个实例化某个抽象的闭包方法,此时未实例化;

//定义了一个单例模式的类,别名为redis
$app->singleton('redis2',function(){
    $redis=new Predis\Client([],['prefix'=>'shrimp']);
    $redis->select(7);
    return $redis;
});//注册一个实例化某个抽象的闭包方法,此时未实例化,单例模式;

$redis_client=new Redis();
$app->instance('redis3',$redis_client);   //instance方法,往容器中,防止一个已经实例化好的类()
$re=$app->make('redis3');//从容器中拿出redis3实例

//容器能通过反射类(一个PHP自带的类),自动处理其依赖关系   默认就是new  某类
//laravel 服务提供者的本质 是在容器中绑定,某个服务的实例化方法    且该方法的执行顺序,优先于默认的  new  某类
//laravel  静态代理的思想  得到被代理类的完整命名空间类名,通过容器,得到该类的实例,执行被静态调用的方法

管道 中间件实现

关键思想 两层闭包 参考资料 理解了参考中的计数器的例子,就能明白了

单独使用Laravel database类

在自己项目中 使用Laravel的ORM操作数据库,真香 参考资料,单独使用Laravel

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值