PHP基于反射获取一个类中所有的方法
发布时间 - 2026-01-11 03:10:10 点击率:次本文实例讲述了PHP基于反射获取一个类中所有的方法。分享给大家供大家参考,具体如下:

当我们使用一个类时既没有源码也没有文档时(尤其是php扩展提供的类,比如mysqli,Redis类),我们该怎么知道这个类中提供了哪些方法,以及每个方法该怎么使用呢,此时就该PHP中强大的反射登场了,下面以Redis扩展为例用代码演示:
<?php
$ref = new ReflectionClass('Redis');
$consts = $ref->getConstants(); //返回所有常量名和值
echo "----------------consts:---------------" . PHP_EOL;
foreach ($consts as $key => $val)
{
echo "$key : $val" . PHP_EOL;
}
$props = $ref->getDefaultProperties(); //返回类中所有属性
echo "--------------------props:--------------" . PHP_EOL . PHP_EOL;
foreach ($props as $key => $val)
{
echo "$key : $val" . PHP_EOL; // 属性名和属性值
}
$methods = $ref->getMethods(); //返回类中所有方法
echo "-----------------methods:---------------" . PHP_EOL . PHP_EOL;
foreach ($methods as $method)
{
echo $method->getName() . PHP_EOL;
}
返回结果:
----------------consts:--------------- REDIS_NOT_FOUND : 0 REDIS_STRING : 1 REDIS_SET : 2 REDIS_LIST : 3 REDIS_ZSET : 4 REDIS_HASH : 5 ATOMIC : 0 MULTI : 1 PIPELINE : 2 OPT_SERIALIZER : 1 OPT_PREFIX : 2 OPT_READ_TIMEOUT : 3 SERIALIZER_NONE : 0 SERIALIZER_PHP : 1 OPT_SCAN : 4 SCAN_RETRY : 1 SCAN_NORETRY : 0 AFTER : after BEFORE : before --------------------props:-------------- -----------------methods:--------------- __construct __destruct connect pconnect close ping echo get set setex psetex setnx getSet randomKey renameKey renameNx getMultiple exists delete incr incrBy incrByFloat decr decrBy type append getRange setRange getBit setBit strlen getKeys sort sortAsc sortAscAlpha sortDesc sortDescAlpha lPush rPush lPushx rPushx lPop rPop blPop brPop lSize lRemove listTrim lGet lGetRange lSet lInsert sAdd sSize sRemove sMove sPop sRandMember sContains sMembers sInter sInterStore sUnion sUnionStore sDiff sDiffStore setTimeout save bgSave lastSave flushDB flushAll dbSize auth ttl pttl persist info resetStat select move bgrewriteaof slaveof object bitop bitcount bitpos mset msetnx rpoplpush brpoplpush zAdd zDelete zRange zReverseRange zRangeByScore zRevRangeByScore zRangeByLex zCount zDeleteRangeByScore zDeleteRangeByRank zCard zScore zRank zRevRank zInter zUnion zIncrBy expireAt pexpire pexpireAt hGet hSet hSetNx hDel hLen hKeys hVals hGetAll hExists hIncrBy hIncrByFloat hMset hMget multi discard exec pipeline watch unwatch publish subscribe psubscribe unsubscribe punsubscribe time eval evalsha script debug dump restore migrate getLastError clearLastError _prefix _serialize _unserialize client scan hscan zscan sscan pfadd pfcount pfmerge getOption setOption config slowlog rawCommand getHost getPort getDBNum getTimeout getReadTimeout getPersistentID getAuth isConnected getMode wait pubsub open popen lLen sGetMembers mget expire zunionstore zinterstore zRemove zRem zRemoveRangeByScore zRemRangeByScore zRemRangeByRank zSize substr rename del keys lrem ltrim lindex lrange scard srem sismember zrevrange sendEcho evaluate evaluateSha
进一步当我们想要知道具体一个方法怎么使用,有哪些参数时,我们可以对这个方法进行进一步的反射,以上例中的bitpos方法为例(文档中并没有介绍该方法的使用)
echo '---------------------params-----------------------' . PHP_EOL . PHP_EOL;
$reflectMethod = $ref->getMethod('bitpos'); //传入方法名即可
echo $reflectMethod; // 会调用$reflectMethod->__toString() 返回可打印的形式;
打印结果:
---------------------params-----------------------
Method [ <internal:redis> public method bitpos ] {
}
并没有看到需要参数,可能与该方法的具体实现有关,具体原因只能去看redis扩展的代码实现,正常情况下应该是返回如下的形式,以mysqli的select_db方法为例:
$ref = new ReflectionClass('mysqli');
echo '---------------------params-----------------------' . PHP_EOL . PHP_EOL;
$reflectMethod = $ref->getMethod('select_db'); //传入方法名即可
echo $reflectMethod; // 会调用$reflectMethod->__toString() 返回可打印的形式;
---------------------params-----------------------
Method [ <internal:mysqli> public method select_db ] {
- Parameters [1] {
Parameter #0 [ <required> $database ]
}
}
这时就没办法了 我们只能靠对redis的理解以及参考相似方法来使用了,比如bitop
public function bitOp( $operation, $retKey, ...$keys) {}
贴下最终的方法调用
$redis = new Redis();
$redis->connect('127.0.0.1');
$redis->setBit('bit', 15, 1);
echo 'bitpos: ' . $redis->bitpos('bit', 1) . PHP_EOL; //bitpos: 15
$redis->close();
是不是很有趣呢!
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
# PHP
# 反射
# 获取
# 类
# 方法
# PHP的反射动态获取类方法、属性、参数操作示例
# php面试实现反射注入的详细方法
# PHP反射原理与用法深入分析
# php提供实现反射的方法和实例代码
# PHP进阶学习之反射基本概念与用法分析
# php反射学习之不用new方法实例化类操作示例
# PHP反射学习入门示例
# PHP反射实际应用示例
# 用PHP的反射实现委托模式的讲解
# 浅析PHP类的反射来实现依赖注入过程
# PHP基于反射机制实现自动依赖注入的方法详解
# PHP反射基础知识回顾
# 类中
# 为例
# 当我们
# 该怎么
# 程序设计
# 操作技巧
# 文档
# 相关内容
# 尤其是
# 不是很
# 感兴趣
# 我们可以
# 就没
# 去看
# 给大家
# 更多关于
# 就该
# 方法来
# 所述
# 面向对象
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用Blade模板引擎?(完整语法和示例)
php json中文编码为null的解决办法
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
音乐网站服务器如何优化API响应速度?
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
实例解析Array和String方法
Laravel怎么为数据库表字段添加索引以优化查询
Thinkphp 中 distinct 的用法解析
Laravel如何使用Service Container和依赖注入?(代码示例)
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
如何用已有域名快速搭建网站?
bootstrap日历插件datetimepicker使用方法
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
如何用低价快速搭建高质量网站?
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
Android仿QQ列表左滑删除操作
Laravel如何使用Blade组件和插槽?(Component代码示例)
如何用美橙互联一键搭建多站合一网站?
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
javascript基于原型链的继承及call和apply函数用法分析
Laravel怎么实现验证码(Captcha)功能
如何快速使用云服务器搭建个人网站?
个人网站制作流程图片大全,个人网站如何注销?
免费视频制作网站,更新又快又好的免费电影网站?
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
如何在Tomcat中配置并部署网站项目?
Windows Hello人脸识别突然无法使用
Laravel如何自定义错误页面(404, 500)?(代码示例)
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
长沙企业网站制作哪家好,长沙水业集团官方网站?
android nfc常用标签读取总结
如何在自有机房高效搭建专业网站?
nginx修改上传文件大小限制的方法
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
canvas 画布在主流浏览器中的尺寸限制详细介绍
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
如何在IIS中新建站点并解决端口绑定冲突?
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
lovemo网页版地址 lovemo官网手机登录
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
香港服务器建站指南:免备案优势与SEO优化技巧全解析
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
Laravel如何使用Passport实现OAuth2?(完整配置步骤)

