摘要:判断是否存在构造函数,不存在直接实例化,存在则通过来获取输入函数,并有相应的方法解决依赖参数问题,实现依赖注入。
Laravel 框架关键技术解析·读书笔记(一)
入口文件
请求访问的入口文件,主要完成几部分工作,分别是:
自动加载函数的添加
服务器实例化与服务注册
路由加载
请求实例化与路由分发
相应生成与发送
其中,自动加载函数用于包含引用文件,改文件是composer工具自动生成的,直接require关键字添加即可。
在Laravel框架中一些功能的生成都需要服务容器实现,即IlluminateContainerContainer类的实例,服务容器用于服务注册和解析,也就是说向服务容器注册能够实现某些功能的实例或者回调函数,当需要使用该功能时从服务容器中获取相应的实例来完成。
访问网站的根目录,服务器会调用入口文件进行处理,入口文件会通过IlluminateHttpRequest类的静态方法createFormGlobals()实现请求的实例化,然后通过路由进行分发处理,路由会根据请求的地址查找路由表,查找到将通过路由表中对应的相应处理方式进行处理并返回响应。
模型组件
Illuminatedatabase 组件主要用于操作数据库,他提供了两种数据库的方式,一种是查询构造器方式,一种是Eloqument ORM 方式
通过Eloquent ORM 方式操作数据库需要以下工作
创建数据库
添加数据库配置信息
启动Eloquent ORM模块
创建model类
通过model类操作数据库
启动Eloquent ORM 模块阶段需要用到数据库的管理类,即IlluminateDatabaseCapsuleManager 类,需要相应初始化,以及数据库相关配置,以完成数据库Eloquent ORM 模块的启动。
组件开发语法条件
命名空间
文件包含
通过composer工具创建依赖管理时,会在vendor目录下创建一个autoload.php文件和一个composer文件夹,其中composer文件夹中包含了类自动加载函数注册的相关实现,而autoload.php文件是对外的接口,通过包含该文件就可以完成类自动加载函数的注册。
【相应问题看源码,没能够有很理解,停留层次较浅】
匿名函数
特殊语法
魔术方法
魔术常量
反射
主要用来动态的获取系统中的类、实例对象、方法等语言结构的信息,通过反射API函数可以实现对这些语言构件信息的动态获取和动态操作等(PHP5具有完整的反射API,添加了对类、接口、函数、方法和扩展进行反向工作的能力)
在laravel框架中,服务容器解析服务的过程中就用到了反射机制
##文件 : IlluminateContainerContainer.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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/28667.html
摘要:框架关键技术解析读书笔记二第五章框架应用程序根目录版本默认的框架应用程序是符合规范的,所以相应的目录结构也是基本固定的,不同的目录加载了功能文件,如果添加了新的目录,需要在文件中添加规范的自动加载部分并执行命令。 Laravel 框架关键技术解析·读书笔记(二) 第五章 框架应用程序根目录(5.1版本) 默认的Laravel框架应用程序是符合PSR规范的,所以相应的目录结构也是基本...
摘要:装饰者模式是在开放关闭原则下实现动态添加或减少功能提高程序的扩展性详细介绍注本文可以作为学习装饰者模式的基础篇但是我个人更建议配套装饰者模式来学习效果更佳本文中的例子是由框架关键技术解析中摘抄的。 装饰者模式:是在开放-关闭原则下实现动态添加或减少功能,提高程序的扩展性.详细介绍注: 本文可以作为学习装饰者模式的基础篇,但是我个人更建议配套Decorator Pattern With...
摘要:划下重点,服务容器是用于管理类的依赖和执行依赖注入的工具。类的实例化及其依赖的注入,完全由服务容器自动的去完成。 本文首发于 深入剖析 Laravel 服务容器,转载请注明出处。喜欢的朋友不要吝啬你们的赞同,谢谢。 之前在 深度挖掘 Laravel 生命周期 一文中,我们有去探究 Laravel 究竟是如何接收 HTTP 请求,又是如何生成响应并最终呈现给用户的工作原理。 本章将带领大...
摘要:源码解析这个类的源码主要就是文件的操作和文件属性的操作,而具体的操作是通过每一个实现的,看其构造函数看以上代码知道对于操作,实际上是通过的实例来实现的。可以看下的使用上文已经说了,使得对各种的操作变得更方便了,不管是还是得。 说明:本文主要学习下LeagueFlysystem这个Filesystem Abstract Layer,学习下这个package的设计思想和编码技巧,把自己的一...
摘要:大家有好的文章可以在评论下面分享出来共同进步本文链接数组使用之道程序员进阶学习书籍参考指南教你在不使用框架的情况下也能写出现代化代码巧用数组函数框架中间件实现没错,这就是面向对象编程设计模式需要遵循的个基本原则令人困惑的在中使用协程实现多任 大家有好的文章,可以在评论下面分享出来, 共同进步! 本文github链接 php PHP 数组使用之道 PHP程序员进阶学习书籍参考指南 教你...
阅读 858·2021-11-15 11:38
阅读 2470·2021-09-08 09:45
阅读 2777·2021-09-04 16:48
阅读 2506·2019-08-30 15:54
阅读 896·2019-08-30 13:57
阅读 1581·2019-08-29 15:39
阅读 472·2019-08-29 12:46
阅读 3450·2019-08-26 13:39