Maison  >  Article  >  développement back-end  >  PHP obtient tous les attributs d'une classe en fonction de la réflexion

PHP obtient tous les attributs d'une classe en fonction de la réflexion

墨辰丷
墨辰丷original
2018-05-18 10:22:013094parcourir

Cet article présente principalement PHP pour obtenir toutes les méthodes d'une classe basées sur la réflexion. Combiné avec le formulaire d'exemple, il analyse en détail les étapes et les précautions associées pour utiliser le mécanisme de réflexion pour obtenir tous les attributs et méthodes de la classe. . Amis qui en ont besoin Vous pouvez vous référer à

pour plus de détails :

Quand on utilise une classe sans code source ni documentation (notamment les classes fournies par les extensions PHP, comme mysqli, les classes Redis) , que devons-nous faire ? Sachant quelles méthodes sont fournies dans cette classe et comment utiliser chaque méthode, il est temps que la puissante réflexion en PHP apparaisse. Ce qui suit est une démonstration de code utilisant l'extension Redis comme exemple :

<?php
$ref = new ReflectionClass(&#39;Redis&#39;);
$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;
}

Résultat retour :

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

Plus loin quand on veut savoir comment utiliser une méthode spécifique et ses paramètres Quand, nous pouvons refléter davantage cette méthode, en prenant comme exemple la méthode bitpos dans l'exemple ci-dessus (l'utilisation de cette méthode n'est pas introduite dans le document)

echo &#39;---------------------params-----------------------&#39; . PHP_EOL . PHP_EOL;
$reflectMethod = $ref->getMethod(&#39;bitpos&#39;);  //传入方法名即可
echo $reflectMethod;  // 会调用$reflectMethod->__toString() 返回可打印的形式;

Imprimer les résultats :

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

Il n'y a aucun paramètre requis, qui peut être lié au spécifique implémentation de la méthode.La raison spécifique ne peut être vue que dans l'extension redis. L'implémentation du code devrait normalement renvoyer la forme suivante, en prenant la méthode select_db de mysqli comme exemple :

$ref = new ReflectionClass(&#39;mysqli&#39;);
echo &#39;---------------------params-----------------------&#39; . PHP_EOL . PHP_EOL;
$reflectMethod = $ref->getMethod(&#39;select_db&#39;);  //传入方法名即可
echo $reflectMethod;  // 会调用$reflectMethod->__toString() 返回可打印的形式;

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

Pour le moment, nous n'avons pas d'autre choix que de nous appuyer sur notre compréhension de redis et de nous référer à des méthodes similaires pour l'utiliser, comme bitop

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

Publier l'appel de méthode final

$redis = new Redis();
$redis->connect(&#39;127.0.0.1&#39;);
$redis->setBit(&#39;bit&#39;, 15, 1);
echo &#39;bitpos: &#39; . $redis->bitpos(&#39;bit&#39;, 1) . PHP_EOL; //bitpos: 15
$redis->close();

Recommandations associées :

Dépendance automatique basée sur un mécanisme de réflexion en PHP Méthodes injectées

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn