如何用PHP类的反射来实现依赖注入.doc

如何用PHP类的反射来实现依赖注入.doc

ID:59357648

大小:66.50 KB

页数:7页

时间:2020-09-04

如何用PHP类的反射来实现依赖注入.doc_第1页
如何用PHP类的反射来实现依赖注入.doc_第2页
如何用PHP类的反射来实现依赖注入.doc_第3页
如何用PHP类的反射来实现依赖注入.doc_第4页
如何用PHP类的反射来实现依赖注入.doc_第5页
资源描述:

《如何用PHP类的反射来实现依赖注入.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、如何用PHP类的反射来实现依赖注入大家对PHP开发已经不在陌生了,如今应用PHP技术的公司和企业也有很多,今天小编和大家探讨一下如何用PHP类的反射来实现依赖注入,对该问题感兴趣或者是对PHP开发感兴趣的小伙伴就随小编一起来了解一下吧。PHP具有完整的反射API,提供了对类、接口、函数、方法和扩展进行逆向工程的能力。通过类的反射提供的能力我们能够知道类是如何被定义的,它有什么属性、什么方法、方法都有哪些参数,类文件的路径是什么等很重要的信息。也正式因为类的反射很多PHP框架才能实现依赖注入自动解决类与类之间的依赖关系,这给我们平时的开发带来了很大的方便。本文主要是讲

2、解如何利用类的反射来实现依赖注入(DependencyInjection),并不会去逐条讲述PHPReflection里的每一个API。为了更好地理解,我们通过一个例子来看类的反射,以及如何实现依赖注入。下面这个类代表了坐标系里的一个点,有两个属性横坐标x和纵坐标y。/***ClassPoint*/classPoint{public$x;public$y;/***Pointconstructor.*@paramint$xhorizontalvalueofpoint'scoordinate*@paramint$yverticalvalueofpoint'scoordi

3、nate*/publicfunction__construct($x=0,$y=0){$this->x=$x;$this->y=$y;}}接下来这个类代表圆形,可以看到在它的构造函数里有一个参数是Point类的,即Circle类是依赖与Point类的。classCircle{/***@varint*/public$radius;//半径/***@varPoint*/public$center;//圆心点constPI=3.14;publicfunction__construct(Point$point,$radius=1){$this->center=$point;

4、$this->radius=$radius;}//打印圆点的坐标publicfunctionprintCenter(){printf('centercoordinateis(%d,%d)',$this->center->x,$this->center->y);}//计算圆形的面积publicfunctionarea(){return3.14*pow($this->radius,2);}}ReflectionClass下面我们通过反射来对Circle这个类进行反向工程。把Circle类的名字传递给reflectionClass来实例化一个ReflectionClass

5、类的对象。$reflectionClass=newreflectionClass(Circle::class);//返回值如下object(ReflectionClass)#1(1){["name"]=>string(6)"Circle"}反射出类的常量$reflectionClass->getConstants();返回一个由常量名称和值构成的关联数组array(1){["PI"]=>float(3.14)}通过反射获取属性$reflectionClass->getProperties();返回一个由ReflectionProperty对象构成的数组array(2

6、){[0]=>object(ReflectionProperty)#2(2){["name"]=>string(6)"radius"["class"]=>string(6)"Circle"}[1]=>object(ReflectionProperty)#3(2){["name"]=>string(6)"center"["class"]=>string(6)"Circle"}}反射出类中定义的方法$reflectionClass->getMethods();返回ReflectionMethod对象构成的数组array(3){[0]=>object(Reflection

7、Method)#2(2){["name"]=>string(11)"__construct"["class"]=>string(6)"Circle"}[1]=>object(ReflectionMethod)#3(2){["name"]=>string(11)"printCenter"["class"]=>string(6)"Circle"}[2]=>object(ReflectionMethod)#4(2){["name"]=>string(4)"area"["class"]=>string(6)"Circle"}}我们还可以通过getConstructor(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。