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