首页 > 编程语言 >php反射机制

php反射机制

时间:2023-08-25 11:34:26浏览次数:42  
标签:function 反射 name person Person 机制 php public


PHP5添加了一项新的功能:Reflection,这个功能使得phper可以reverse-engineer class, interface,function,method and extension,通过php代码,就可以得到某object的所有信息,并且可以和它交互。

反射是什么?
它是指在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


<?php
class Person {
	
	private $_allowDynamicAttributes = false;
	protected $id = 0;
	protected $name;

	public function getId() {
		return $this->id;
	}
	public function setId($v) {
		$this->id = $v;
	}
	public function getName() {
		return $this->name;
	}
	public function setName($v) {
		$this->name = $v;
	}
	public function show(){
		echo $this->id."=".$this->name."<br/>";
	}
}

$person =new Person();
$person->setId("100");
$person->setName("小黄");
$person->show();

//使用反射API
$reflect = new ReflectionObject($person);
$props = $reflect->getProperties();
foreach($props as $prop){
	echo $prop->getName()."</br>";
}
 // 返回对象的所有方法
$m = $reflect->getMethods();
foreach($m as $prop){
	echo $prop->getName()."</br>";
}
print_r($props);



结果:

100=小黄
_allowDynamicAttributes
id
name
getId
setId
getName
setName
show
Array ( [0] => ReflectionProperty Object ( [name] => _allowDynamicAttributes [class] => Person ) [1] => ReflectionProperty Object ( [name] => id [class] => Person ) [2] => ReflectionProperty Object ( [name] => name [class] => Person ) )

标签:function,反射,name,person,Person,机制,php,public
From: https://blog.51cto.com/u_2148212/7228041

相关文章

  • php使用traits实现代码复用、多继承
    php只能继承一个父类,php5.4后新增traits实现代码复用机制变向达到多继承1、trait和类相似,但不能被实例化,无需继承,只需要在类中使用关键词use引入即可,可引入多个traits,用','隔开2、trait会覆盖继承的方法,当前类会覆盖trait方法<?phpclassPeople{ publicfunctionwalk(){ ech......
  • phpcmsV9调用默认的分页样式
    //回复列表 publicfunctionganyanreply(){//点击后台-内容-留言管理,默认运行到这 $page=isset($_GET['page'])?intval($_GET['page']):1;//分页 $tablename=$this->db->db_tablepre.$MODEL[$modelid]['tablename'];// $this->db->......
  • phpcmsv9更换域名后和空间后登陆后台提示验证码错误如何解决
    修改 caches\configs\system.php 的//网站路径 'web_path' => '/apppath/',和'js_path' => 'http://localhost/apppath/statics/js/', //CDN JS'css_path' => 'http://localhost/apppath/statics/css/', //CD......
  • phpcms后台发表文章时候添加新的字段
    在modules/content/templates/content_add.tpl.php模板中的foreach($forminfos['base'] as $field=>$info) {}外面添加新的字段,注意name为字段名,同时在数据库的v9_news_data添加新的字段和testfield一致.<th width="80">测试字段</th><td><input type='text'......
  • phpcms添加后台菜单
    后台-扩展-菜单管理,选择在哪里添加菜单,然后填写模块名,文件名,方法名即可,参考系统默认的写法,如管理内容模块名为content,文件名是content.php,方法名是init,则调用的是 phpcms\modules\content\content.php中的init()方法,在content.php中function add() { }//对应的是content_add.tp......
  • MyBatis机制介绍与原理
    插件简介什么是插件插件是一种软件组件,可以在另一个软件程序中添加功能或特性。插件通常被设计成可以随时添加或删除的,而不影响主程序的功能。插件可以扩展软件程序的功能,这让用户可以根据自己的需求定制软件,提高工作效率。常见的插件包括浏览器插件、音频和视频编辑软件的特效......
  • php读入和伪协议
    前言:今天做题遇到了php伪协议,不会,所以来学习一下(有些内容是问newbing的,不是我写的)1.0什么是php伪协议什么是php伪协议,就是php支持的协议和封装协议1.1什么时候使用php伪协议?在文件包含时使用php伪协议,常见的文件包含函数如下1include**2require**3include_......
  • 变量常量与垃圾回收机制及数据类型
    内容概要pycharm的简单使用1.如何修改主题 File|Settings|Appearance&Behavior|Appearance|Theme2.如何切换解释器 File|Settings|Project:django_lock|PythonInterpreter3.如何创建python文件 #1.如何创建项目 文件一定是存在于项目中......
  • 八月更新 | CI 构建计划触发机制升级、制品扫描 SBOM 分析功能上线!
    点击链接了解详情这个八月,腾讯云CODINGDevOps对持续集成、制品管理、项目协同、平台权限等多个产品模块进行了升级改进,为用户提供更灵活便捷的使用体验。以下是CODING新功能速递,快来看看是否有您期待已久的功能特性:01CI构建计划触发机制升级在原有代码变更及合并请求......
  • PHP发送阿里云短信
    1.阿里云开通短信服务,申请签名,模板,和AccessKey 2.下载PHP版本的SDK:https://help.aliyun.com/document_detail/55359.html?spm=a2c4g.55284.0.0.2a4b11da3sdcbG 3.将sdk文件夹放到项目里面,这里是直接放到了api文件夹,注意修改命名空间 4.在api里自定义一个控制器如sms.php,......