六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

php中反射怎么取得一個類中的方法詳細說明

[摘要]這篇文章主要介紹了PHP基于反射獲取一個類中所有的方法,結合實例形式較為詳細的分析了php使用反射機制獲取類中所有屬性與方法的操作步驟與相關注意事項,需要的朋友可以參考下本文實例講述了PHP基于反射...
這篇文章主要介紹了PHP基于反射獲取一個類中所有的方法,結合實例形式較為詳細的分析了php使用反射機制獲取類中所有屬性與方法的操作步驟與相關注意事項,需要的朋友可以參考下

本文實例講述了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中文網其它相關文章!


學習教程快速掌握從入門到精通的SQL知識。




主站蜘蛛池模板: 一级爱爱片 | 天堂中文资源在线地址 | 青青青视频免费观看 | 亚洲综合久 | 四虎影院在线观看网站 | 欧美天天性 | 亚洲第一综合 | 日本三级韩国三级欧美三级 | 午夜性福利视频 | 日本在线看 | 一区二区三区在线视频观看 | 午夜96影视 | 青青青手机视频在线观看 | 四虎永久在线精品2022 | 欧美一区二区福利视频 | 亚洲33p| 亚洲视频欧洲视频 | 性做久久久久久 | 天天射综合网站 | 亚洲欧美日韩精品久久久 | 日韩操片| 日日日日人人人夜夜夜2017 | 午夜免费啪视频观看网站 | 青青国产成人久久激情91麻豆 | 一级做a爰性视频 | 日韩国产在线观看 | 四虎影院最新地址 | 青青青视频免费线看 视频 青青青视频免费观看 | 亚洲图片国产日韩欧美 | 中文字幕乱码系列免费 | 四虎新网址 | 午夜精品久久久 | 日本美女久久 | 日日夜夜爽 | 青娱乐国产盛宴 | 色欧美在线 | 色香欲亚洲天天综合网 | 青娱乐在线免费观看视频 | 日产国语一区二区三区在线看 | 日本wwwxxxxx| 日韩在线视频免费播放 |