@animaflower 有道理,我错了,那就不是为了性能考虑,因为每次访问这个方法都要加载它。
@animaflower 这两行中间只有一句话,应该就是为这句话服务的。
点进他注册的自动加载函数 loadClassLoader 中可以看到,如果访问特定的完全限定名,则返回 ClassLoader 这个类。
中间这句恰恰访问的就是这个, 这个过程下来的作用就是把 ClassLoader 对象赋值给了当前类的静态属性 loader,因为他注册的时候把加载函数置于了 spl autoload 的栈首,任何自动加载的文件都要先经过这个方法处理,可能为了性能考虑,在完成目的后就立刻注销掉了这个自动加载器。
为什么这里不直接用 include 呢? 还是为了性能考虑,并不是每个应用的每个页面都需要 composer 去自动加载, include 的话,每个请求无论是否需要都要读取一次这个文件,他想做到按需加载。
为什么注销之后还能运行? 那是因为你之前没注销的时候,他已经生成了加载文件的映射数据,就是后面的 autoload_psr static files 那些, 注销自动加载器没有影响这些文件的载入和你的应用效果。
laravel 门槛不高, 是很多人基础弱, 多看看基础, 很容易上手的,相信自己,迎接挑战。
任何高质量的问题都是欢迎的,很多人乐于一起帮助研究哪些有挑战的问题,前提是你得把问题描述清楚的。苹果电脑是首选,做开发来讲免于很多折腾,可以的话最好用。原生 PHP 基础不管使用任何框架都是必备的,没事看看 php.net 慢慢看就好。 Laravel 和你之前使用什么并没明显的关系,零基础一样可以很好的使用,学习一门东西要有主动研究的热情和毅力。
让控制器和应用代码解耦,控制器只做转发,而不需要触碰任何 orm 或者业务逻辑。
如果直接调用 orm,未来如果需求变了,你就要改控制器中的 all。
如果转发到应用/业务对象,未来任何变更都可以直接在那里改,于是就职责单一了。
dispatcher 在这里不一定非要用,直接调用即可。
@sunnirvana 没测试,你自己看执行不对就修改吧。
文档中忘记了有没有,估计要看容器和设置相关的内容,我是凭感觉写的,以前应该是用过。
app() 返回容器, 容器对象实现了几个数组接口所以可以用下标访问,得到 config 对象, config 对象上应该有 get 和 set 方法。
// eloquent class.
// add dynamic sqlite database setting.
protected static $sqliteDatabase = 'yourname';
/**
* The "booting" method of the model.
*
* @return void
*/
protected static function boot()
{
parent::boot(); // TODO: Change the autogenerated stub
// We do config here.
if ($sqlite = static::$sqliteDatabase) {
app()['config']->set('database.connections.sqlite.database', $sqlite);
}
}
$this->dispatch(new YourJob($this));
$result = $this->attribute;
class YourJob
{
func constru(Controller $controller){
$this->controller = $controller;
}
func handle()
{
// do something
$this->controller->attrbute = true;
}
}
@workaholic 那就各自保留意见吧:) 没抄就没抄吧。