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

首頁 > 語言 > PHP > 正文

PHP基于反射獲取一個類教程

2024-09-04 11:43:51
字體:
來源:轉載
供稿:網友

使用PHP基于反射獲取一個類也是現在很多編程人員會經常遇到的,大多數的人可能還不知道怎么通過PHP反射獲取一個類,下面文章就給大家具體介紹下獲取操作方法,感興趣的一起來了解下。

當我們使用一個類時既沒有源碼也沒有文檔時(尤其是php擴展提供的類,比如mysqli,Redis類),我們該怎么知道這個類中提供了哪些方法,以及每個方法該怎么使用呢,此時就該PHP中強大的反射登場了,下面以Redis擴展為例用代碼演示:

  1. $ref = new ReflectionClass('Redis'); 
  2. $consts = $ref->getConstants(); //返回所有常量名和值 
  3. echo "----------------consts:---------------" . PHP_EOL; 
  4. foreach ($consts as $key => $val
  5.   echo "$key : $val" . PHP_EOL; 
  6. $props = $ref->getDefaultProperties(); //返回類中所有屬性 
  7. echo "--------------------props:--------------" . PHP_EOL . PHP_EOL; 
  8. foreach ($props as $key => $val
  9.   echo "$key : $val" . PHP_EOL;  // 屬性名和屬性值 
  10. }//Vevb.com 
  11. $methods = $ref->getMethods();   //返回類中所有方法 
  12. echo "-----------------methods:---------------" . PHP_EOL . PHP_EOL; 
  13. foreach ($methods as $method
  14.   echo $method->getName() . PHP_EOL; 

返回結果:

  1. ----------------consts:--------------- 
  2. REDIS_NOT_FOUND : 0 
  3. REDIS_STRING : 1 
  4. REDIS_SET : 2 
  5. REDIS_LIST : 3 
  6. REDIS_ZSET : 4 
  7. REDIS_HASH : 5 
  8. ATOMIC : 0 
  9. MULTI : 1 
  10. PIPELINE : 2 
  11. OPT_SERIALIZER : 1 
  12. OPT_PREFIX : 2 
  13. OPT_READ_TIMEOUT : 3 
  14. SERIALIZER_NONE : 0 
  15. SERIALIZER_PHP : 1 
  16. OPT_SCAN : 4 
  17. SCAN_RETRY : 1 
  18. SCAN_NORETRY : 0 
  19. AFTER : after 
  20. BEFORE : before 
  21. --------------------props:-------------- 
  22. -----------------methods:--------------- 
  23. __construct 
  24. __destruct 
  25. connect 
  26. pconnect 
  27. close 
  28. ping 
  29. echo 
  30. get 
  31. set 
  32. setex 
  33. psetex 
  34. setnx 
  35. getSet 
  36. randomKey 
  37. renameKey 
  38. renameNx 
  39. getMultiple 
  40. exists 
  41. delete 
  42. incr 
  43. incrBy 
  44. incrByFloat 
  45. decr 
  46. decrBy 
  47. type 
  48. append 
  49. getRange 
  50. setRange 
  51. getBit 
  52. setBit 
  53. strlen 
  54. getKeys 
  55. sort 
  56. sortAsc 
  57. sortAscAlpha 
  58. sortDesc 
  59. sortDescAlpha 
  60. lPush 
  61. rPush 
  62. lPushx 
  63. rPushx 
  64. lPop 
  65. rPop 
  66. blPop 
  67. brPop 
  68. lSize 
  69. lRemove 
  70. listTrim 
  71. lGet 
  72. lGetRange 
  73. lSet 
  74. lInsert 
  75. sAdd 
  76. sSize 
  77. sRemove 
  78. sMove 
  79. sPop 
  80. sRandMember 
  81. sContains 
  82. sMembers 
  83. sInter 
  84. sInterStore 
  85. sUnion 
  86. sUnionStore 
  87. sDiff 
  88. sDiffStore 
  89. setTimeout 
  90. save 
  91. bgSave 
  92. lastSave 
  93. flushDB 
  94. flushAll 
  95. dbSize 
  96. auth 
  97. ttl 
  98. pttl 
  99. persist 
  100. info 
  101. resetStat 
  102. select 
  103. move 
  104. bgrewriteaof 
  105. slaveof 
  106. object 
  107. bitop 
  108. bitcount 
  109. bitpos 
  110. mset 
  111. msetnx 
  112. rpoplpush 
  113. brpoplpush 
  114. zAdd 
  115. zDelete 
  116. zRange 
  117. zReverseRange 
  118. zRangeByScore 
  119. zRevRangeByScore 
  120. zRangeByLex 
  121. zCount 
  122. zDeleteRangeByScore 
  123. zDeleteRangeByRank 
  124. zCard 
  125. zScore 
  126. zRank 
  127. zRevRank 
  128. zInter 
  129. zUnion 
  130. zIncrBy 
  131. expireAt 
  132. pexpire 
  133. pexpireAt 
  134. hGet 
  135. hSet 
  136. hSetNx 
  137. hDel 
  138. hLen 
  139. hKeys 
  140. hVals 
  141. hGetAll 
  142. hExists 
  143. hIncrBy 
  144. hIncrByFloat 
  145. hMset 
  146. hMget 
  147. multi 
  148. discard 
  149. exec 
  150. pipeline 
  151. watch 
  152. unwatch 
  153. publish 
  154. subscribe 
  155. psubscribe 
  156. unsubscribe 
  157. punsubscribe 
  158. time 
  159. eval 
  160. evalsha 
  161. script 
  162. debug 
  163. dump 
  164. restore 
  165. migrate 
  166. getLastError 
  167. clearLastError 
  168. _prefix 
  169. _serialize 
  170. _unserialize 
  171. client 
  172. scan 
  173. hscan 
  174. zscan 
  175. sscan 
  176. pfadd 
  177. pfcount 
  178. pfmerge 
  179. getOption 
  180. setOption 
  181. config 
  182. slowlog 
  183. rawCommand 
  184. getHost 
  185. getPort 
  186. getDBNum 
  187. getTimeout 
  188. getReadTimeout 
  189. getPersistentID 
  190. getAuth 
  191. isConnected 
  192. getMode 
  193. wait 
  194. pubsub 
  195. open 
  196. popen 
  197. lLen 
  198. sGetMembers 
  199. mget 
  200. expire 
  201. zunionstore 
  202. zinterstore 
  203. zRemove 
  204. zRem 
  205. zRemoveRangeByScore 
  206. zRemRangeByScore 
  207. zRemRangeByRank 
  208. zSize 
  209. substr 
  210. rename 
  211. del 
  212. keys 
  213. lrem 
  214. ltrim 
  215. lindex 
  216. lrange 
  217. scard 
  218. srem 
  219. sismember 
  220. zrevrange 
  221. sendEcho 
  222. evaluate 
  223. evaluateSha 

進一步當我們想要知道具體一個方法怎么使用,有哪些參數時,我們可以對這個方法進行進一步的反射,以上例中的bitpos方法為例(文檔中并沒有介紹該方法的使用)

  1. echo '---------------------params-----------------------' . PHP_EOL . PHP_EOL; 
  2. $reflectMethod = $ref->getMethod('bitpos');  //傳入方法名即可 
  3. echo $reflectMethod;  // 會調用$reflectMethod->__toString() 返回可打印的形式; 

打印結果:

---------------------params-----------------------

Method [ <internal:redis> public method bitpos ] {}

并沒有看到需要參數,可能與該方法的具體實現有關,具體原因只能去看redis擴展的代碼實現,正常情況下應該是返回如下的形式,以mysqli的select_db方法為例:

  1. $ref = new ReflectionClass('mysqli'); 
  2. echo '---------------------params-----------------------' . PHP_EOL . PHP_EOL; 
  3. $reflectMethod = $ref->getMethod('select_db');  //傳入方法名即可 
  4. echo $reflectMethod;  // 會調用$reflectMethod->__toString() 返回可打印的形式; 
  5.  
  6. ---------------------params----------------------- 
  7. Method [ <internal:mysqli> public method select_db ] { 
  8.  - Parameters [1] { 
  9.   Parameter #0 [ <required> $database ] 
  10.  } 

這時就沒辦法了 我們只能靠對redis的理解以及參考相似方法來使用了,比如bitop

public function bitOp( $operation, $retKey, ...$keys) {}

貼下最終的方法調用:

  1. $redis = new Redis(); 
  2. $redis->connect('127.0.0.1'); 
  3. $redis->setBit('bit', 15, 1); 
  4. echo 'bitpos: ' . $redis->bitpos('bit', 1) . PHP_EOL; //bitpos: 15 
  5. $redis->close(); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长沙县| 丰宁| 浮梁县| 金塔县| 玛多县| 青浦区| 井陉县| 武强县| 沙河市| 玉屏| 虞城县| 房山区| 平武县| 平谷区| 慈溪市| 沙坪坝区| 南丰县| 鹿邑县| 九寨沟县| 云林县| 卓资县| 吉林省| 西乌珠穆沁旗| 贵港市| 大冶市| 永年县| 华宁县| 普宁市| 无棣县| 济阳县| 榆中县| 凤山县| 古交市| 公安县| 镇坪县| 南江县| 高邮市| 长丰县| 耒阳市| 大足县| 汉阴县|