ThinkPHP容器源码深度解析(2)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: ThinkPHP容器源码深度解析

三、如何理解控制反转和依赖注入

其实这俩个就是指的一个东西,就是一种编程思想而已,不要想的那么难以理解和高大上。


那么什么是容器,容器直面理解就是装东西的东西。在编程中,我们常见的变量、对象属性都是一个容器。一个容器里边能够装什么,完全取决于对该容器的定义。


然而现在我们讨论的是另外一种容器,它存储的既不是文本、数值,而是对象、类、接口通过这种容器,得以实现很多高级功能,最常用的就是代码之间的解耦、依赖注入。


那么为什么会存在俩种概念,为什么要说控制反转和依赖注入呢!在上文也提到过,它们其实指的就是一种东西,只是描述的角度不同而已。


就跟你是爸爸的儿子,你还是你爷爷的孙子,不管儿子还是孙子都指的是一个人。只是站在不同的角度看待问题而已。


控制反转


是站在容器的角度看待问题,容器控制着应用程序,由容器反向的向应用程序注入应用程序需要的外部资源。


依赖注入


是站在应用程序的角度看待问题,应用程序依赖容器创建并注入它所需要的外部资源。


作用


主要用来减少代码之间的耦合程度。


有效的分离对象和应用程序所需要的外部资源。


下面俩幅图就可以很清晰的说明问题


image.png

image.png



给大家整一个简单的案例


定义俩个类分别为Person、Car,在Person中实例并调用Car中的pay方法。


image.png


然后在控制器中调用,并且打印结果肯定就是Car返回的123,这个就不去打印了。


image.png



那这个时候我们把代码修改一下,把Car类直接传给Person类,在Person类中直接用传过来的对象去调用对应的方法。


image.png


这只是一个简单的实现过程,为了给阅读框架容器代码做一个铺垫,在后文中会详细说明框架中的容器注入。

四、必会反射机制

不知道大家有没有了解过GO的反射机制,咔咔在当时看了go的反射机制后说实话有点晕乎乎的。


但是在后来看了PHP的反射之后,不仅对go的反射有了一定的深入了解,并且对于PHP的反射也是更好的理解。


反射这一概念是在PHP5.0被引出来的,在目前使用的框架中咔咔知道的就有thinkphp和laravel都使用了反射来实现依赖注入。


对于反射的理解:其实就是从根获取根以外的东西,放在编程中讲就是只要知道一个类就可以知道这个类所有的属性和方法。


案例


这只是一个简单的实现案例,获取类的全部方法和属性。可以看下图中的打印结果跟TestReflection是否一致。

image.png


image.png



这个也从侧面表现出现一个问题,就是会暴露出来一些本不应该暴露出来的信息。


关于反射提供的接口还有很多,这里就介绍几个常用的,其余的在框架源码中解析。


使用反射执行一个类的方法


打印出来的结果就是咔咔

image.png


使用反射执行一个类中带参数的方法


image.png


使用反射执行一个类中不带参数的方法

image.png


其它的方法你们自己可以尝试尝试,因为这个反射的接口在平时基础开发是不怎么用的,这咔咔给大家介绍的都是后边在阅读源码都是可以用的到的。


既然了解到了反射,那么反射可以做什么事情呢!其中有一个功能点自动生成文档。


反射到这里就简单的了解一下,至于还想了解更多的接口使用可以去官方查看对应的接口信息。


image.png


在了解完反射之后就要开始进入正题了,就需要正式进入我们的容器环节了。只有上边的基础打好接下来的容器才能更好的理解。



相关文章
|
1天前
|
算法 Java Go
ArrayList源码解析
ArrayList源码解析
5 1
|
7天前
|
缓存 Java 开发者
10个点介绍SpringBoot3工作流程与核心组件源码解析
Spring Boot 是Java开发中100%会使用到的框架,开发者不仅要熟练使用,对其中的核心源码也要了解,正所谓知其然知其所以然,V 哥建议小伙伴们在学习的过程中,一定要去研读一下源码,这有助于你在开发中游刃有余。欢迎一起交流学习心得,一起成长。
|
10天前
|
存储 监控 安全
【专栏】Docker Compose:轻松实现容器编排的利器
【4月更文挑战第27天】Docker Compose是款轻量级容器编排工具,通过YAML文件统一管理多容器应用。本文分三部分深入讨论其核心概念(服务、网络、卷和配置)、使用方法及最佳实践。从快速入门到高级特性,包括环境隔离、CI/CD集成、资源管理和安全措施。通过案例分析展示如何构建多服务应用,助力高效容器编排与管理。
|
8天前
|
存储 虚拟化 数据中心
|
10天前
|
存储 Kubernetes C++
【专栏】Kubernetes VS Docker Swarm:哪个容器编排工具更适合你?
【4月更文挑战第27天】对比Kubernetes和Docker Swarm:K8s在可扩展性和自动化方面出色,有强大社区支持;Swarm以简易用著称,适合初学者。选择取决于项目需求、团队技能和预期收益。高度复杂项目推荐Kubernetes,快速上手小项目则选Docker Swarm。了解两者特点,助力选取合适容器编排工具。
|
6天前
|
存储 Linux 文件存储
Linux使用Docker部署Traefik容器并实现远程访问管理界面-1
Linux使用Docker部署Traefik容器并实现远程访问管理界面
|
7天前
|
Shell Docker Ruby
3.Docker容器的数据卷
3.Docker容器的数据卷
|
7天前
|
弹性计算 Shell 数据安全/隐私保护

推荐镜像

更多