• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP基于反射获取一个类中所有属性

php 搞代码 4年前 (2022-01-22) 23次浏览 已收录 0个评论

这篇文章主要介绍了PHP基于反射获取一个类中所有的方法,结合实例形式较为详细的分析了php使用反射机制获取类中所有属性与方法的操作步骤与相关注意事项,需要的朋友可以参考下

具体如下:

当我们使用一个类时既没有源码也没有文档时(尤其是php扩展提供的类,比如mysqli,Redis类),我们该怎么知道这个类中提供了哪些方法,以及每个方法该怎么使用呢,此时就该PHP中强大的反射登场了,下面以Redis扩展为例用代码演示:

<?php$ref = new ReflectionClass('Redis');$consts = $ref->getConstants(); //返回所有常量名和值echo "----------------consts:--------------<i style="color:transparent">本文来源gaodai$ma#com搞$$代**码)网8</i><strong>搞代gaodaima码</strong>-" . 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 : 0REDIS_STRING : 1REDIS_SET : 2REDIS_LIST : 3REDIS_ZSET : 4REDIS_HASH : 5ATOMIC : 0MULTI : 1PIPELINE : 2OPT_SERIALIZER : 1OPT_PREFIX : 2OPT_READ_TIMEOUT : 3SERIALIZER_NONE : 0SERIALIZER_PHP : 1OPT_SCAN : 4SCAN_RETRY : 1SCAN_NORETRY : 0AFTER : afterBEFORE : before--------------------props:-------------------------------methods:---------------__construct__destructconnectpconnectclosepingechogetsetsetexpsetexsetnxgetSetrandomKeyrenameKeyrenameNxgetMultipleexistsdeleteincrincrByincrByFloatdecrdecrBytypeappendgetRangesetRangegetBitsetBitstrlengetKeyssortsortAscsortAscAlphasortDescsortDescAlphalPushrPushlPushxrPushxlPoprPopblPopbrPoplSizelRemovelistTrimlGetlGetRangelSetlInsertsAddsSizesRemovesMovesPopsRandMembersContainssMemberssIntersInterStoresUnionsUnionStoresDiffsDiffStoresetTimeoutsavebgSavelastSaveflushDBflushAlldbSizeauthttlpttlpersistinforesetStatselectmovebgrewriteaofslaveofobjectbitopbitcountbitposmsetmsetnxrpoplpushbrpoplpushzAddzDeletezRangezReverseRangezRangeByScorezRevRangeByScorezRangeByLexzCountzDeleteRangeByScorezDeleteRangeByRankzCardzScorezRankzRevRankzInterzUnionzIncrByexpireAtpexpirepexpireAthGethSethSetNxhDelhLenhKeyshValshGetAllhExistshIncrByhIncrByFloathMsethMgetmultidiscardexecpipelinewatchunwatchpublishsubscribepsubscribeunsubscribepunsubscribetimeevalevalshascriptdebugdumprestoremigrategetLastErrorclearLastError_prefix_serialize_unserializeclientscanhscanzscansscanpfaddpfcountpfmergegetOptionsetOptionconfigslowlograwCommandgetHostgetPortgetDBNumgetTimeoutgetReadTimeoutgetPersistentIDgetAuthisConnectedgetModewaitpubsubopenpopenlLensGetMembersmgetexpirezunionstorezinterstorezRemovezRemzRemoveRangeByScorezRemRangeByScorezRemRangeByRankzSizesubstrrenamedelkeyslremltrimlindexlrangescardsremsismemberzrevrangesendEchoevaluateevaluateSha

进一步当我们想要知道具体一个方法怎么使用,有哪些参数时,我们可以对这个方法进行进一步的反射,以上例中的bitpos方法为例(文档中并没有介绍该方法的使用)

echo '---------------------params-----------------------' . PHP_EOL . PHP_EOL;$reflectMethod = $ref->getMethod('bitpos');  //传入方法名即可echo $reflectMethod;  // 会调用$reflectMethod->__toString() 返回可打印的形式;

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP基于反射获取一个类中所有属性
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址