首页 > 编程语言 >PHP 反射机制打印对象

PHP 反射机制打印对象

时间:2023-05-26 14:55:27浏览次数:35  
标签:反射 return name 打印 param public item PHP class

 1 <?php
 2 /**
 3 
 4 echo Obj::new('Redis');
 5 echo Obj::new('Redis')->method('set')?->isPublic();
 6 
 7  */
 8 
 9 class Obj extends ReflectionClass
10 {
11     public static function std(?array $attrs = null)
12     {
13         $std = new \stdClass();
14         foreach ($attrs as $key => $value) {
15             is_numeric($key) ? $std->$value = '' : $std->$key = $value;
16         }
17         return $std;
18     }
19 
20     public static function new($argument)
21     {
22         return new static($argument);
23     }
24 
25     public function constant($name)
26     {
27         return $this->getConstant($name);
28     }
29 
30     public function property($name)
31     {
32         try {
33             return $this->getProperty($name);
34         } catch (\ReflectionException $e) {
35             return null;
36         }
37     }
38 
39     public function method($name)
40     {
41         try {
42             return $this->getMethod($name);
43         } catch (\ReflectionException $e) {
44             return null;
45         }
46     }
47 
48 
49     public function __toString()
50     {
51         $items = $this->getReflectionConstants();
52         foreach ($items as $key => $item) {
53             $class['const'][] = sprintf('const %s = %s;', $item->getName(), $item->getValue());
54         }
55 
56         $items = $this->getProperties();
57         foreach ($items as $key => $item) {
58             $class['prop'][] = sprintf('%s %s = "%s"', implode(' ', Reflection::getModifierNames($item->getModifiers())), $item->getName(), $item->getDefaultValue());
59         }
60 
61         $items = $this->getMethods();
62         foreach ($items as $key => $item) {
63             $params = $item->getParameters();
64             $param = '';
65             if ($params) {
66                 foreach ($params as $item1) {
67                     $param .= $item1->getType() . ' ' . $item1->getName();
68                     if ($item1->isDefaultValueAvailable()) {
69                         $param .= '=' . $item1->getDefaultValue() . ', ';
70                     } else {
71                         $param .= ', ';
72                     }
73                 }
74                 $param = rtrim($param, ', ');
75             }
76 
77             $class['method'][] = sprintf('%s %s(%s )', implode(' ', Reflection::getModifierNames($item->getModifiers())), $item->name, $param);
78         }
79 
80         $output = array_merge($class['const'] ?? [], $class['prop'] ?? [], $class['method'] ?? []);
81 
82         return implode("\n", $output);
83     }
84 }

 

标签:反射,return,name,打印,param,public,item,PHP,class
From: https://www.cnblogs.com/zbseoag/p/17434747.html

相关文章

  • C# 反射的定义和应用场景
     1什么是反射首先要复习一下C#的编译过程,可以解释为下图其中dll/exe中,包括元数据(metadata)和IL(中间语言IntermediateLanguage)另外还出现的其他名词:CLR(公共语言运行时,CommonLanguageRuntime)和JIT(实时编译器JustinTime)总结:一个运行的程序查看本身的元数据或......
  • Graphpad Prism9.5.1 科学绘图软件 下载安装教程(含Win/Mac)
    软件下载AutodeskFlame2024formac软件介绍AutodeskFlame破解版由是Autodesk公司(译作欧特克)开发的一款高端电影剪辑和特效制作系统。Flame是用于高速合成、高级图形和客户驱动的交互设计的终极视觉特效制作系统。AutodeskFlame提供出色的性能和荣获奥斯卡奖的工具。从......
  • php语言开发宝塔部署thinkphp考试平台管理系统
    技术架构PHP7.2+Thinkphp6+React+UmiJs+nginx+mysql5.7cnetos7以上+宝塔面板搭建教程1.下载源码,宝塔添加一个站点,PHP版本选择7.2。2.压缩codes后台代码目录,上传后台代码到宝塔的网站根目录当中解压缩,关闭防跨站,运行目录指向public,伪静态选择thinkphp,设置为:locat......
  • 【Java基础】万字长文深入理解Java反射机制
    大家好,我是程序员青戈,一个被Bug耽误了才艺的程序员......
  • java反射代码案例
    反射案例代码点击查看代码packagecom.bh.zoo;publicclassWolfextendsAnimal{publicStringname;publicStringcolor;protectedStringblood;privateintage;publicvoideat(){System.out.println("狼吃肉");}public......
  • mybatis-plus控制台打印SQL
    方法一、在application.yml添加配置#mybatis-plus配置控制台打印完整带参数SQL语句mybatis-plus:configuration:log-impl:org.apache.ibatis.logging.stdout.StdOutImpl方法二、mapper增加日志等级为debuglogging:level:com.chz.mapper:debug ......
  • PHP中的AMQP类
    PHP中的AMQP类标签(空格分隔):php,amqp官网地址:http://docs.php.net/manual/da/book.amqp.phpAMQPConnectionAMQPConnection{/*Methods*///与AMQP代理建立连接publicboolconnect(void)//构造函数$credentials可以理解为配置项的数组//$co......
  • PHP操作RabbitQM
    PHP操作RabbitQM标签(空格分隔):amqp,phpFanoutExchange多个queue都可以绑定到exchange,并且每个queue都会接受到消息producer(client.php)$exchangeName="exchange_01";try{$connection=newAMQPConnection();$connection->setHost('127.0.0.1');$......
  • c# 打印电子发票
     usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;usingSystem.Drawing.Printing;usingSpire.Pdf;namespaceInvoicePrint{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();......
  • vue3+vite build打包删除控制台打印
    很简单,直接在vite.config.ts里面添加配置即可:exportdefault({mode})=>defineConfig({build:{minify:"terser",terserOptions:{compress:{//生产环境时移除consoledrop_console:true,drop_debugger:true,......