国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP基于反射獲取一個類中所有的方法

2024-05-05 00:00:03
字體:
來源:轉載
供稿:網友

本文實例講述了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 : 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() 返回可打印的形式;

打印結果:

---------------------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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 高唐县| 凉城县| 上杭县| 长泰县| 平武县| 通河县| 吐鲁番市| 淮滨县| 满洲里市| 九龙城区| 湄潭县| 大姚县| 商水县| 永安市| 吴江市| 绥棱县| 大新县| 辉县市| 浦东新区| 怀安县| 玉田县| 伊吾县| 大丰市| 中牟县| 太白县| 云安县| 罗平县| 绥德县| 西峡县| 虹口区| 安平县| 红河县| 东辽县| 遂川县| 宿松县| 萨迦县| 高碑店市| 邢台县| 富源县| 永顺县| 长沙县|