Laravel 框架关键技术解析·读书笔记(一)
第一章
请求访问的入口文件,主要完成几部分工做,分别是:php
- 自动加载函数的添加
- 服务器实例化与服务注册
- 路由加载
- 请求实例化与路由分发
- 相应生成与发送
其中,自动加载函数用于包含引用文件,改文件是composer工具自动生成的,直接require关键字添加便可。laravel
在Laravel框架中一些功能的生成都须要服务容器实现,即IlluminateContainerContainer类的实例,服务容器用于服务注册和解析,也就是说向服务容器注册可以实现某些功能的实例或者回调函数,当须要使用该功能时从服务容器中获取相应的实例来完成。数据库
访问网站的根目录,服务器会调用入口文件进行处理,入口文件会经过IlluminateHttpRequest类的静态方法createFormGlobals()实现请求的实例化,而后经过路由进行分发处理,路由会根据请求的地址查找路由表,查找到将经过路由表中对应的相应处理方式进行处理并返回响应。服务器
Illuminatedatabase 组件主要用于操做数据库,他提供了两种数据库的方式,一种是查询构造器方式,一种是Eloqument ORM 方式composer
经过Eloquent ORM 方式操做数据库须要如下工做框架
- 建立数据库
- 添加数据库配置信息
- 启动Eloquent ORM模块
- 建立model类
- 经过model类操做数据库
启动Eloquent ORM 模块阶段须要用到数据库的管理类,即IlluminateDatabaseCapsuleManager 类,须要相应初始化,以及数据库相关配置,以完成数据库Eloquent ORM 模块的启动。函数
第二章(环境搭建)
第三章(框架经常使用的PHP语法)
-
组件开发语法条件工具
- 命名空间
- 文件包含
- 经过composer工具建立依赖管理时,会在vendor目录下建立一个autoload.php文件和一个composer文件夹,其中composer文件夹中包含了类自动加载函数注册的相关实现,而autoload.php文件是对外的接口,经过包含该文件就能够完成类自动加载函数的注册。
- 【相应问题看源码,没可以有很理解,停留层次较浅】
- 匿名函数
-
特殊语法网站
- 魔术方法
- 魔术常量
-
反射ui
- 主要用来动态的获取系统中的类、实例对象、方法等语言结构的信息,经过反射API函数能够实现对这些语言构件信息的动态获取和动态操做等(PHP5具备完整的反射API,添加了对类、接口、函数、方法和扩展进行反向工做的能力)
- 在laravel框架中,服务容器解析服务的过程当中就用到了反射机制
##文件 : Illuminate\Container\Container.php
在Laravel框架中,解析服务是经过build()函数实现,通常分为两种状况:一种是查找对应的服务是否被服务提供者注册为实例或者提供服务的匿名函数,若是是,则直接进行服务解析;第二种是服务名称没有响应的服务绑定,经过反射机制来动态建立服务。经过反射机制动态建立服务的过程能够分为两个步骤:第一步是经过放射机制获取服务类构造函数的信息,第二步是解决服务类构造函数的依赖问题。【判断是否存在构造函数,不存在直接实例化,存在则经过getParameters()来获取输入函数,并有相应的方法解决依赖参数问题,实现依赖注入。】
-
后期静态绑定
- 一样的相关介绍,在《深刻PHP:面向对象、模式与实践》中也有相关介绍,增长了一个后期延迟静态绑定的功能,用于继承范围引用静态调用的类
- 在类的继承过程当中,使用的类再也不是当前类,而是调用的类,后期静态延迟绑定使用关键字static来实现,经过这种机制,“static::”再也不解析未定义当前方法所在的类,而是在实际运行时计算获得的。即为运行时最初调用的类。
- 后期延迟绑定还能够用于对象实例中。在对象实例化中static会根据运行时调用的类来决定实例化对象,而self是根据所在位置的类来决定实例化对象【更多实例,参见IlluminateEloquentModel类的代码,该类中使用了大量的后期静态绑定】
- 新特性
-
trait
- 单继承语言解决多继承问题方式(Ruby中经过混入类Mixin的方法解决)
- 经过use 关键字添加到其余类的内部,增长了水平的特性的组合。
trait的一些特质
- 优先级:当前类的方式会覆盖trait中的方法,而trait中的方法会覆盖积累的方法
- 多个trait组合,经过逗号分隔
- 冲突解决:结局多个trait中插入了相同的方法,若没有明确解决冲突将会产生一个致命错误,解决该冲突,须要使用insteadof操做符来明确指定使用冲突方法中的哪个,同时可使用as操做符将其中一个冲突的方法以另外一个名字来引入。
- 修改方法的访问控制:使用as语法调整方法的访问控制
- trait的抽象方法:在trait中可使用抽象成员
- trait的静态成员:可使用静态方法、静态变量
- trait的属性定义:能够定义属性
-
简化三元运算符
- $var = (expr1)?(expr2):(expr3);
- 从PHP5.3起,能够省略三元运算符的中间部分 $var = expr1 ? :expr3