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);
     }
    }

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-05-03
PHP是动态页面
第2个回答  2016-04-24
PHP是动态页面

php反射在哪些场景有哪些作用?
反射是操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复杂,可扩展的应用。 其用途如:自动加载插件,自动生成文档,甚至可用来扩充PHP语言。 php反射api由若干类组成,可帮助我们用来访问程序的元数据或者同相关的注释交互。借助反射我们可以获取诸如类实现了那些方法,创建一个类的实...

php技术亮点有哪些
功能强大(推荐学习:PHP编程从入门到精通)PHP在Web项目开发过程中具有极其强大的功能,而且实现相对简单,支持几乎所有流行的数据库以及操作系统.应用广泛目前,很多著名的和非著名的网站,都是通过PHP语言来开发完成的开发成本低和其他技术相比,php是少有的本身免费且开发源代码的技术语言。且PHP不受平台...

普通公司员工的编程水平与阿里巴巴有多大差距?
Spring AOP的实现原理和场景;(应用场景很重要) Spring bean的作用域和生命周期; Spring Boot比Spring做了哪些改进? Spring 5比Spring4做了哪些改进;(惭愧呀,我们还在用Spring4,高版本的没关心过) Spring IOC是什么?优点是什么? SpringMVC、动态代理、反射、AOP原理、事务隔离级别;中间件 Dubbo完整的一次调用链路...

编程语言的分类和用途
3、java:字节码、虚拟机、垃圾回收、接口、多线程、包、程序库、反射、框架、集成、组件、http、web、数据库、SSH、javaee。java的程序比较讲究扩展性和可维护性,一般会使用比较多的设计模式,常用的程序组织形式是MVC、监听者模式等。4 、Javascript:闭包、对象、函数、CSS、DOM、Ajax、HTML5、node....

web漏洞攻击有哪些?
由于这种漏洞是由PHP变量过滤不严导致的,所以只有基于PHP开发的Web应用程序才有可能存在文件包含漏洞。5、SQL注入漏洞SQL注入漏洞是由于Web应用程序没有对用户输入数据的合法性进行判断,攻击者通过Web页面的输入区域(如URL、表单等) ,用精心构造的SQL语句插入特殊字符和指令,通过和数据库交互获得私密信息或者篡改数据库...

反光材料原理介绍 反光材料的特点有哪些?
反光膜反光原理简单介绍 反光材料最直接的用途就是起警示作用,降低,或阻止危险的发生。 很多人都会好奇,大家不明白看起来并不起眼的反光材料,当灯光照射的时候会反射出那么醒目的光。启示原理并不难,主要是工艺比较负杂。由于玻璃珠是球形的,由于投向屏幕的光线近似于平行光线,当其照射到球形顶点时...

php中$$是什么意思?
在php中,$$符号的作用是将一个变量的值作为另一个变量的名称来访问。例如,如果$a的值为"b",那么$$a就表示变量$b的值。因为这里$$a相当于$b,所以变量$b的值为"hello" ,所以最终的结果为 'hello'。b = "hello";echo $$a; \/\/ 输出 "hello&#...

请问PHP中的面向对象,JAVA面向对象一样吗。如果不一样,有什么区别(有...
php由于自身是动态类型语言,变量本身的类型动态,就没有java的重载功能。这也导致类设计上的一些很大区别。php的动态特性和具有自我反射能力,可以把方法名称当成“消息”发送,在运行时判断对象是否能接收消息,java的静态就不能直接应用这样的设计。php6.x之前估计不会类似java的有名字空间或包管理机制。...

Php7有哪些新特性
echo "sum: " . $a + $b; PHP会解析为: echo ("sum: " . $a) + $b; PHP 8将会解析为: echo "sum :" . ($a + $b); __toString中抛出异常支持反射引用 PHP 7.4将会新增ReflectionReference?类 移除php短标签 <?将会在PHP 8中移除,<?=会继续保留 弃用左...

反光材料用途广泛而多样
在灯光照射下,和其它非反光材料相比,反光材料有非常醒目的视觉效果。那么反光材料用途有哪些?近年来,反光材料以其独特的反光效果被广泛应用各个领域。目前,反光材料厂的应用主要集中于两大市场领域,一是计划专用市场,二是民用市场。所谓计划专用市场,一般是指根据国家指令法规,必须使用反光材料的领域...

相似回答