PHP反射类的使用方法、实现依赖注入

本文介绍了PHP的反射类用于分析程序结构,提取类、方法、属性等信息。通过实例详细阐述如何利用反射实现依赖注入,展示了ReflectionClass在获取类信息、方法参数等方面的应用。并提到Laravel框架的依赖注入机制与此类似。
摘要由CSDN通过智能技术生成

PHP中的扩展反射类,该扩展用来分析php程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。

class test{
   

    private $name;
    private $sex;
    function __construct(){
   
        $this->aaa='aaa';
    }
}

	$test=new test();

	$reflect=new ReflectionClass($test);
	$pro=$reflect->getDefaultProperties();
	print_r($pro); //打印结果:Array ( [name] => [sex] => )

	echo $test->aaa; //打印结果:aaa

在这个test类中,声明了两个成员变量 n a m e 和 name和 namesex,但是在构造函数中,又声明了一个变量$aaa,初始化类,使用反射类打印默认成员属性只有声明的两个成员变量属性,但是打印类的 $aaa变量发现还是可以输出结果。

== 在你这个例子中,使用ReflectionClass是不恰当的,因为__construct只有在实例化class时,才会执行。 ==
也就是说ReflectionClass更多的是反射类声明时的结构,而不是类实例化后的结构,所以没有输出属性aaa是正确,因为属性aaa确实是(在类声明时)不存在的。
那么怎么看属性aaa呢,应该用ReflectionObject反射实例化后的结构 例如

<?php
class test{
   
    private $name;
    private $sex;
    function __construct(){
   
        $this->aaa='aaa';
    }
}
$test=new test();

$reflect=new ReflectionObject($test);
$pro=$reflect->getProperties();
print_r($pro);

经过实例化以后,属性aaa才会存在,这时你就能看到属性aaa了
因为php是“动态”语言,所以可以类的成员变量不用声明,在函数中声明也是可以的。

浅析如何通过PHP类的反射来实现依赖注入

PHP具有完整的反射 API,提供了对类、接口、函数、方法和扩展进行逆向工程的能力。通过类的反射提供的能力我们能够知道类是如何被定义的,它有什么属性、什么方法、方法都有哪些参数,类文件的路径是什么等很重要的信息。也正式因为类的反射很多PHP框架才能实现依赖注入自动解决类与类之间的依赖关系,这给我们平时的开发带来了很大的方便。 本文主要是讲解如何利用类的反射来实现依赖注入(Dependency Injection),并不会去逐条讲述PHP Reflection里的每一个API,详细的API参考信息请查阅官方文档
再次声明这里实现的依赖注入非常简单,并不能应用到实际开发中去
为了更好地理解,我们通过一个例子来看类的反射,以及如何实现依赖注入。
下面这个类代表了坐标系里的一个点,有两个属性横坐标x和纵坐标y。

/**
 * Class Point
 */
class Point
{
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值