Laravel源码阅读笔记(一)

参考着Laravel的源码还有github上的源码解读来学习一下源码,提升一下。第一篇看config文件的加载。

加载配置文件首先是查找配置文件的缓存是否存在,存在的话,就优先加载配置文件的缓存来起到更快的效果;不存在的话,就会遍历配置文件目录里面的所有配置文件来把所有配置信息加载进来,方便在程序的各个地方进行调用。

加载配置文件有两部分:搜索配置文件,加载配置文件的数组变量值。

getConfigurationFiles 可以根据配置文件目录搜索所有的 php 为后缀的文件,并将其转化为 files 数组,其 key 为目录名以字符 . 为连接的字符串 ,value 为文件真实路径。就是个数组。

加载配置文件的数组。

实际上加载数据就是加载进来的大数组,配置文件的获取和加载也类似,都是把字符串转换为多维数组来进行访问。

加载配置文件的数值、

PHP自动加载的功能

这个功能出现之前:类的加载依靠include/require,当项目变大时,维护类的加载语句变成了一件非常复杂的事情,经常可能会发生错误。而且require_once的代价不小。

php5提出了autoload机制,使得程序在有可能使用类的时候才自动包含类文件。也叫延迟加载。

有一个自己定义的__autoload函数(有吗?我怎么没写过?)

function __autoload($classname) {
   require_once ($classname . ".class.php");
}

这个函数做了三件事,根据类名确定类文件名,确定类文件所在的磁盘路径,将类从磁盘文件中加载到系统中。

主要是前两件事比较需要考虑一下,要确定一下类和实际的磁盘文件之间的映射关系。

但是因为__autoload是全局函数只能定义一次,如果要把所有的类和磁盘文件的映射关系都写进去,会十分的庞杂臃肿。解决的办法是使用一个__autoload调用堆栈,不同的映射关系写到不同的__autoload函数中,然后统一注册管理。所谓的SPL Autoload。

PSR标准

一个顶级命名空间,可以有多个子命名空间
分隔符的变化,命名空间有下划线的话直接映射成一层目录,PSR0解决了上面的问题,PSR4解决了映射层数过深的部分问题

之所以没写过__autoload函数是因为composer帮你做了,它下载好了你要的版本的库代码,生成了映射函数,你做的就是用use引入而已。

框架甚至把顶级域名映射也做了,直接用就好。

Laravel框架下,composer的自动加载是怎么做道德

入口的index.php第一句就是利用composer来实现自动加载功能

database
eloquent model

定义关联,在一个Model定义一个关联函数,利用关联函数来操作另一个Model,user表是用户表,posts是用户发的文章,用户可以发表多篇文章
$user->posts()->where(‘active’,1)->get()
用$user这个用户查询到active为1的所有的所有的文章,posts是关联函数,可以通过这个关联函数去操作另一个与user关联的表。