【Dig Laravel】前期准备

最近看了下Laravel的底层代码,其中有一些奇怪的语法,以及一些设计特别巧妙的设计模式。接下来几天可能每天都会产出一篇关于Laravel源码与设计思想的分析文章。在此之前先总结一下看Laravel源码时需要了解的知识。 先希望大家多关注,多提意见。另外我发现,有些博客和文档有时候描述一个技术点的时候并没有达到我们的期望,博客是代表被人的理解的结晶,想要真正了解这个知识点,源码是最好的文档。有时候看源码可能会绕进去,但是不怕,我们上学的时候应该都学过UML类图,画图可以方便我对知识点有更加全面的认识。

对于Laravel中常用设计模式的理解

  大家可以看看我之前写的这篇文章https://www.haxibiao.com/blog/89

  大家如果下班有时间学习的话,推荐大家看看《Head First设计模式》,《敏捷软件开发-原则模型与实践》

php 可变变量、可变函数、可变类名

可变变量

概念可变变量名指的是使用一个变量的值作为这个变量的名称。

image.png

类属性也可以通过可变属性名来访问。可变属性名从产生调用所在的变量的访问范围内获取。例如,如果你的表达式是这样的:$foo->$bar,那么运行时将会在本地变量范围内寻找变量$bar,它的值将会做为$foo对象的一个属性名。如果$bar是个数组也可以使用。

注意请注意,可变变量名不能用于PHP函数和类里的超级全局数组变量($_GET,$_POST…)上。变量$this也是一个不能动态取名的特殊变量。

可变函数

概念:可变函数名指的是使用一个变量的值作为这个变量的名称。

image.png

可变类名(PHP 5.3.0之后)

概念:可变类名指的是使用一个变量的值作为这个变量的名称。

image.png

可变变量、可变函数、可变类名在Laravel中的体现:

Illuminate\Cache\CacheManager中的

image.png

匿名函数

关于匿名函数的使用相信大家也不陌生了,我们直接来看匿名函数在Laravel中的应用。在Laravel中,服务提供者注册的过程中,通过将服务名称与提供服务的匿名函数进行绑定,在使用时可以动态解析。

Illuminate\Routing中的RoutingServiceProvider

image.png

这里的$this->app->singleton()函数的作用是将接口与后面提供服务的匿名函数绑定起来,用于服务解析,服务就是通过匿名函数实现的。

魔术方法,魔术常量

魔术方法:

作用:主要提供对PHP运行环境的过程控制和检测。下面介绍几个经常出现在Laravel源码中的魔术方法,其他的请查阅文档:

__call():在对象中调用一个不可访问的方法时,__call()会被调用

__callStatic():在静态方式中调用一个不可访问的方法时,__callStatic()会被调用

__autoload():在试图使用尚未定义的类时自动调用

__isset(): 对不可访问的属性调用isset()或empty()时,会被调用。

__unset():对不可访问的属性调用unset()时,会被调用。

魔术常量

 概念:预定义常量,可以直接拿来用的。

比如:

——FILE——:文件的完整路径和文件名

——CLASS——:类的名称

PHP的访问控制-public,private,protecte的区别

image.png

反射

概念:反射可以动态的获取系统中的类,实力对象方法等成员信息

Illuminate\Container命名空间下的Container.php

image.png

这个build()方法加上make()..在源码中经常出现。

后期静态绑定

    概念:通过"static::",来调用运行时最初调用的类。虽然称为“后期静态绑定”,但是不限于静态方法的调用。

image.png

image.png


可变参数

在不确定方法的参数个数下使用:

image.png


本文会常更新。。。

日记本

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
被以下专题收入,发现更多相似内容