你需要的是load方法!
如果返回的是array,后续对数据的处理就会捉襟见肘
注册全局作用域的时候,传入了一个不带有全局作用域的eloquentBuilder,在制造这个不带全局作用距的eloquentBuilder的时候调用了一次with方法,这个时候with还是空所以
要看在ServiceProvider里register方法里面用的是bind还是singleton,如果是bind每次都new,如果是singleton就是单例。单例只实例化一次
是完全可以的。但是这种做法是不规范的,如果所有东西都放一个文件,会显得很乱。没有良好的分类,维护起来是一个灾难!
不延迟加载的ServiceProvider在框架引导过程中就会实例化.延迟加载的ServiceProvider会在你用到他提供的服务的时候被实例化!
不用,因为容器可以用PHP反射帮你解析
教主说的很对。至于看源码,个人感觉要花时间来沉淀,至少我在看中间件装饰者模式设计的管道哪里卡了很久!痛并快乐着。(拨洋葱有兴趣可以研究下很有意思)
个人感觉。它的实现归功容器的bindings这个数组。这个bindings更像是一个机床。帮laravel生产各种对象。
首先你需要定义一个helper function
function abc(){
return app()->make('abc'); //或者 return app('abc'); 方法有很多。教主有讲
}
接着定义一个AbcServiceProvider的类在他的register方法里面
public function register(){
$this->app->bind('abc',function(){
return new Abc();
});
}
把这个ServiceProvider加入到app里面那个ServiceProvider数组里面就可以了
太可惜了,教主。你就这样离我们而去! 哎。