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

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

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知識。




主站蜘蛛池模板: 四虎国产一区二区三区 | 五月婷婷丁香在线观看 | 日本高清一区二区三区水蜜桃 | 天天干天天插天天 | 亚洲国产成人久久77 | 欧美一区二区激情三区 | 天天躁日日躁 疯人影院 | 天天亚洲综合 | 婷婷在线成人免费观看搜索 | 中文字幕欧美成人免费 | 四虎精品影视 | 性色视频在线观看 | 中文字幕在线免费视频 | 午夜国产福利在线观看 | 青娱乐极品视频在线观看 | 午夜在线观看视频 | 香蕉免费一区二区三区 | 天天插天天爱 | 伊人影音| 亚洲精品乱码久久久久久麻豆 | 偷自拍视频区综合视频区 | 日韩理论片在线观看电视 | 日韩在线专区 | 日韩精品中文字幕一区三区 | 一二三四影视在线看片 | 亚洲美女在线播放 | 日韩免费在线视频 | 亚洲产国偷v产偷v自拍涩爱 | 日韩成人免费aa在线看 | 亚洲国产成人久久一区www妖精 | 伊人网在线视频 | 四虎永久免费在线观看 | 亚洲视频www | 天堂在线观看免费视频 | 日韩 欧美 亚洲 中文字幕 | 亚洲激情另类小说 | 香蕉人人超人人超免费看视频 | 日本视频在线观看免费 | 天堂最新资源在线 | 亚洲天堂中文字幕在线观看 | 亚洲日本国产 |