首页 > 后端开发 > 正文

怎么能通俗易通的了解php中的反射和依赖注入这两个概念

2024-08-20 16:11:47 | 我爱编程网

今天我爱编程网小编为大家带来了怎么能通俗易通的了解php中的反射和依赖注入这两个概念,希望能帮助到大家,一起来看看吧!

本文目录一览:

怎么能通俗易通的了解php中的反射和依赖注入这两个概念

怎么能通俗易通的了解php中的反射和依赖注入这两个概念

除非你去开发类似ZendFramework, ThinkPHP, CakePHP之类的框架,几乎没有机会用到这个。
这是很底层的东西,尤其是依赖注入这种东西的应用场景就是辅助开发,选型的框架支持依赖注入就行了,没必要自己实现。而反射这个东西也差不多,在业务逻辑中我从来没遇到过必须要靠反射解决的问题,同样也是框架才用到。

怎么能通俗易通的了解php中的反射和依赖注入这两个概念

php反射在哪些场景有哪些作用?

反射是在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取的信息以及动态调用对象的方法的功能称为反射API。反射是操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复杂,可扩展的应用。
其用途如:自动加载插件,自动生成文档,甚至可用来扩充PHP语言。
php反射api由若干类组成,可帮助我们用来访问程序的元数据或者同相关的注释交互。借助反射我们可以获取诸如类实现了那些方法,创建一个类的实例(不同于用new创建),调用一个方法(也不同于常规调用),传递参数,动态调用类的静态方法。
反射api是php内建的oop技术扩展,包括一些类,异常和接口,综合使用他们可用来帮助我们分析其它类,接口,方法,属性,方法和扩展。这些oop扩展被称为反射。
通过ReflectionClass,我们可以得到Person类的以下信息:

1)常量 Contants
2)属性 Property Names
3)方法 Method Names静态
4)属性 Static Properties
5)命名空间 Namespace
6)Person类是否为final或者abstract

然后就去看了看thinkphp的源码,对于MVC的实现也有不同的体验ThinkPHP\Lib\Core\App.class.php 中的exec方法

if(!preg_match('/^[A-Za-z](\w)*$/',$action)){
    // 非法操作
    throw new ReflectionException();
   }
   //执行当前操作
   $method = new ReflectionMethod($module, $action); #查看方法
   if($method->isPublic()) {
    $class = new ReflectionClass($module); #反射控制器
    // 前置操作
    if($class->hasMethod('_before_'.$action)) {
     $before = $class->getMethod('_before_'.$action);
     if($before->isPublic()) {
      $before->invoke($module);
     }
    }
    // URL参数绑定检测
    if(C('URL_PARAMS_BIND') && $method->getNumberOfParameters()>0){
     switch($_SERVER['REQUEST_METHOD']) {
      case 'POST':
       $vars = $_POST;
       break;
      case 'PUT':
       parse_str(file_get_contents('php://input'), $vars);
       break;
      default:
       $vars = $_GET;
     }
     $params = $method->getParameters();
     foreach ($params as $param){
      $name = $param->getName();
      if(isset($vars[$name])) {
       $args[] = $vars[$name];
      }elseif($param->isDefaultValueAvailable()){
       $args[] = $param->getDefaultValue();
      }else{
       throw_exception(L('_PARAM_ERROR_').':'.$name);
      }
     }
     $method->invokeArgs($module,$args);
    }else{
     $method->invoke($module); #执行我们需要调用函数
    }
    // 后置操作
    if($class->hasMethod('_after_'.$action)) {
     $after = $class->getMethod('_after_'.$action);
     if($after->isPublic()) {
      $after->invoke($module);
     }
    }

怎么能通俗易通的了解php中的反射和依赖注入这两个概念

PHP反射机制

我爱编程网(https://www.52biancheng.com)小编还为大家带来PHP反射机制的相关内容。

PHP内置的反射机制是一种强大的工具,它通过一组Reflection API,使得开发者可以动态地获取和操作类、方法、属性、参数和注释等信息。这些API包括ReflectionClass、ReflectionMethod、ReflectionObject和ReflectionExtension等,其中ReflectionClass使用最为广泛,它允许你在不实例化类的情况下,访问其内部结构和功能。


为了直观展示反射功能,我们可以创建一个名为User的类,并进行实例化。利用ReflectionClass,我们可以动态地访问和操作User类的属性,如私有属性,以及其公开和受保护的方法。 我爱编程网



  • 创建反射类实例:首先构造一个ReflectionClass对象,指向User类。

  • 反射属性:通过ReflectionClass对象的getProperties()方法,获取类的所有属性。

  • 反射方法:使用getMethods()方法获取所有方法,区分public、private和protected。

  • 反射注释:通过getDocComment()方法获取类、方法或属性的注释。

  • 反射实例化:即使类方法为private,使用ReflectionClass仍能间接执行。


总的来说,反射机制在PHP编程中扮演了至关重要的角色,它能够帮助开发者在编写代码时实现灵活和动态的操作,解决进阶阶段可能遇到的复杂问题。如果你在业务开发中遇到诸如分布式、高并发、性能优化等方面的问题,我整理了丰富的技术资料,覆盖分布式架构、微服务、数据库优化等多个高级进阶主题,这些资料是免费分享的,只需点击下方链接或关注我的频道,即可获取更多技术文章。

以上就是我爱编程网整理的怎么能通俗易通的了解php中的反射和依赖注入这两个概念相关内容,想要了解更多信息,敬请查阅我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“怎么能通俗易通的了解php中的反射和依赖注入这两个概念”相关推荐
php函数实现反转 【PHP】依赖注入(DI)和控制反转(IOC)详解
php函数实现反转 【PHP】依赖注入(DI)和控制反转(IOC)详解

php删除数组重复的值$arr=array(1,2,4,2,0,9,8,5);//定义一个数组。$arr1=$arr;//定义另一个数组和上一个数组一样。//循环第一个数组让后循环第二个数组用第一个数组的每个值和第二个数组比较如果相同就删除,最后输出第二个数组就行了。for($i=0;$i<count($arr);$i++){for($j=$i+1;$j&lt

2025-01-25 05:36:40
PHP中什么是依赖注入
PHP中什么是依赖注入

PHP中什么是依赖注入依赖注入可能是我所知道的最简单设计模式之一,很多情况下可能你无意识中已经使用了依赖注入。不过它也是最难解释的一个。我认为有一部分原因是由于大多数介绍依赖注入的例子缺乏实际意义,让人难理解。因为PHP主要用于Web开发,那就先来看一个简单的web开发实例。HTTP本身是一个无状态的连接协议,为了支持客户在发起WEB请求时应用程序能存储用户信息,我们就需要通过一种技术来

2024-09-12 05:46:48
在PHP语言中,为什么要引入“函数”这个概念?
在PHP语言中,为什么要引入“函数”这个概念?

php中function函数的用法在PHP中,function是用于定义和声明函数的关键字。函数是一段可重复使用的代码块,它封装了一系列操作或逻辑,并可以通过函数名进行调用和执行。通过使用函数,可以将代码模块化,提高代码的可读性、可维护性和重用性。在PHP中,function关键字用于定义和声明函数。函数是一段可重复使用的代码块,它封装了一系列操作或逻辑,并可以通过函数名进行调用和执行,

2025-01-04 03:59:21
JAVA中的反射和反射机制到底是什么啊?
JAVA中的反射和反射机制到底是什么啊?

java中反射实例类装载的步骤及简要阐述java反射和类装载反射机制:Personp=newPerson();这是什么?当然是实例化一个对象了.可是这种实例化对象的方法存在一个问题,那就是必须要知道类名才可以实例化它的对象,这样我们在应用方面就会受到限制.那么有没有这样一种方式,让我们不知道这个类的类名就可以实例化它的对象呢?ThankGoodness!幸亏我们用的是java

2024-04-07 14:49:51
PHP函数的默认值是什么意思,通俗的解释一下
PHP函数的默认值是什么意思,通俗的解释一下

使用PHP中pathinfo函数讲解pathinfo()是PHP中的内置函数,用于以关联数组或字符串形式提供文件路径信息。调用方式为pathinfo(path,options),返回一个关联数组,包含路径信息。使用pathinfo函数的步骤如下:首先,你需要指定要检查的路径作为参数传递给pathinfo()函数。其次,可选择性地提供一个options参数,规定返回的数组元素

2024-12-16 01:20:55
运用php编写一个自定义函数,三角形的底和高为函数的两个参数,通过它们计算面积和周长(用php 自定义一函数,能够输入的整数,反序逐位输出。如输入3456,输)
运用php编写一个自定义函数,三角形的底和高为函数的两个参数,通过它们计算面积和周长(用php 自定义一函数,能够输入的整数,反序逐位输出。如输入3456,输)

运用php编写一个自定义函数,三角形的底和高为函数的两个参数,通过它们计算面积和周长<?phpheader("Content-type:text/html;charset=gb2312");//设置面积计算函数function sanJiaoXingMianJi($bianchang,$gaodu){ $mianJi = ($bianchang*$gaodu)/2; echo $mia

2024-08-21 20:12:14
Python分两行输入两个正整数输出两个数的和差怎么写?
Python分两行输入两个正整数输出两个数的和差怎么写?

Python分两行输入两个正整数输出两个数的和差怎么写?a,b=map(int,input().split())print("两个数的和为:",a+b)print("两个数的差为:",a-b)该代码将两个数从一行中输入,并使用map()函数和split()方法将它们分为两个整数。然后,代码计算和差并输出。python求1+2+3+....+n的和可以使用循环来求1+2+3+

2024-01-05 14:11:24
通达信函数中的FILTER和EXIST有什么用处
通达信函数中的FILTER和EXIST有什么用处

通达信函数中的FILTER和EXIST有什么用处通达信函数中的FILTER和EXIST是两个重要的工具,它们在时间应用和使用条件上有所不同。FILTER主要关注未来的时间范围,它不是一个直接的计算函数,而是筛选工具。例如,FILTER(CLOSE>OPEN,5)会检查未来五天(包括当天)是否有阳线,即使未来某天收阳,也不会立即返回TRUE,只有连续五天都满足条件才会。FILTER常与C

2024-08-09 00:42:58