欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2017年09月08日 11:58:46   作者:紅塵困住年少  
這篇文章主要介紹了PHP基于反射獲取一個類中所有的方法,結(jié)合實例形式較為詳細的分析了php使用反射機制獲取類中所有屬性與方法的操作步驟與相關(guān)注意事項,需要的朋友可以參考下

本文實例講述了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;
}

返回結(jié)果:

----------------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

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

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

打印結(jié)果:

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

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

$ref = new ReflectionClass('mysqli');
echo '---------------------params-----------------------' . PHP_EOL . PHP_EOL;
$reflectMethod = $ref->getMethod('select_db');  //傳入方法名即可
echo $reflectMethod;  // 會調(diào)用$reflectMethod->__toString() 返回可打印的形式;

---------------------params-----------------------
Method [ <internal:mysqli> public method select_db ] {
 - Parameters [1] {
  Parameter #0 [ <required> $database ]
 }
}

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

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

貼下最終的方法調(diào)用

$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();

是不是很有趣呢!

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總

希望本文所述對大家PHP程序設(shè)計有所幫助。

相關(guān)文章

  • php實現(xiàn)等比例不失真縮放上傳圖片的方法

    php實現(xiàn)等比例不失真縮放上傳圖片的方法

    這篇文章主要介紹了php實現(xiàn)等比例不失真縮放上傳圖片的方法,結(jié)合實例形式分析了php基于自定義函數(shù)實現(xiàn)等比例不失真縮放上傳圖片的具體功能定義與使用方法,需要的朋友可以參考下
    2016-11-11
  • 怎樣使用php與jquery設(shè)置和讀取cookies

    怎樣使用php與jquery設(shè)置和讀取cookies

    有兩種處理cookies的方式—服務(wù)端(php,asp等)和客戶端(javascript).在這個教程中,我們將學習到以php和javascript這兩種方式如何去創(chuàng)建cookies
    2013-08-08
  • PHP基于cookie實現(xiàn)統(tǒng)計在線人數(shù)功能示例

    PHP基于cookie實現(xiàn)統(tǒng)計在線人數(shù)功能示例

    這篇文章主要介紹了PHP基于cookie實現(xiàn)統(tǒng)計在線人數(shù)功能,涉及php文件讀寫、cookie訪問、計算等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • IIS7.X配置PHP運行環(huán)境小結(jié)

    IIS7.X配置PHP運行環(huán)境小結(jié)

    很久沒有接觸過php的東西了,今天有個程序需要一個php的運行環(huán)境。由于只需要簡單的跑一下程序,因此覺得沒有必要弄一個LAMP的環(huán)境(如果需要配LAMP環(huán)境的話可以參考我寫的關(guān)于PHP的blog),不如直接用IIS來運行吧。
    2011-06-06
  • php查看網(wǎng)頁源代碼的方法

    php查看網(wǎng)頁源代碼的方法

    這篇文章主要介紹了php查看網(wǎng)頁源代碼的方法,涉及php讀取網(wǎng)頁文件的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • php獲取服務(wù)器操作系統(tǒng)相關(guān)信息的方法

    php獲取服務(wù)器操作系統(tǒng)相關(guān)信息的方法

    這篇文章主要介紹了php獲取服務(wù)器操作系統(tǒng)相關(guān)信息的方法,涉及php針對服務(wù)器端預(yù)定義變量及系統(tǒng)函數(shù)的使用技巧,需要的朋友可以參考下
    2016-10-10
  • PHP編程一定要改掉的5個不良習慣

    PHP編程一定要改掉的5個不良習慣

    在項目的每一次提交之后,我都會進行大量代碼審查,會經(jīng)常看到一些重復(fù)出現(xiàn)的錯誤。以下這五個錯誤應(yīng)該要及時糾正,這是糾正它們的方法。
    2020-09-09
  • Linux系統(tǒng)中為php添加pcntl擴展

    Linux系統(tǒng)中為php添加pcntl擴展

    上篇文章我們介紹了在mac系統(tǒng)中為片php添加pcntl擴展插件,本文我們繼續(xù)來分享下Linux系統(tǒng)中為php添加pcntl擴展的方法,希望小伙伴們能夠喜歡
    2016-08-08
  • php代碼架構(gòu)的八點注意事項

    php代碼架構(gòu)的八點注意事項

    這篇文章主要介紹了php代碼架構(gòu)的八點注意事項,較為全面的分析總結(jié)了基于面向?qū)ο蟪绦蛟O(shè)計的代碼架構(gòu)設(shè)計問題相關(guān)注意事項,需要的朋友可以參考下
    2016-01-01
  • 解析crontab php自動運行的方法

    解析crontab php自動運行的方法

    本篇文章是對crontab php自動運行的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06

最新評論