In diesem Artikel wird hauptsächlich PHP vorgestellt, um alle Methoden in einer Klasse basierend auf der Reflexion zu erhalten. In Kombination mit dem Beispielformular werden die Schritte und zugehörigen Vorsichtsmaßnahmen für die Verwendung des Reflexionsmechanismus zum Abrufen aller Attribute und Methoden in der Klasse detailliert analysiert . Freunde, die es brauchen. Weitere Informationen finden Sie unter
:
Wenn wir eine Klasse ohne Quellcode oder Dokumentation verwenden (insbesondere Klassen, die von PHP-Erweiterungen bereitgestellt werden, z. B. MySQL- und Redis-Klassen). , was sollen wir tun? Da wir wissen, welche Methoden in dieser Klasse bereitgestellt werden und wie jede Methode verwendet wird, ist es an der Zeit, dass die leistungsstarke Reflexion in PHP erscheint. Das Folgende ist eine Codedemonstration am Beispiel der Redis-Erweiterung:
<?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; }
Rückgabeergebnis:
----------------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
Außerdem, wenn wir wissen wollen, wie man ein bestimmtes verwendet Methode und welche Parameter sie hat, können wir Um diese Methode weiter zu reflektieren, nehmen wir die Bitpos-Methode im obigen Beispiel als Beispiel (die Verwendung dieser Methode wird im Dokument nicht vorgestellt)
echo '---------------------params-----------------------' . PHP_EOL . PHP_EOL; $reflectMethod = $ref->getMethod('bitpos'); //传入方法名即可 echo $reflectMethod; // 会调用$reflectMethod->__toString() 返回可打印的形式;
Ergebnisse drucken:
---------------------params----------------------- Method [ <internal:redis> public method bitpos ] { }
hat die erforderlichen Parameter nicht gesehen, was möglicherweise mit der spezifischen Implementierung der Methode zusammenhängt. Der spezifische Grund ist nur in der Code-Implementierung der Redis-Erweiterung zu sehen. Unter normalen Umständen sollte die folgende Form zurückgegeben werden, wobei die Methode select_db von MySQL als Beispiel genommen wird:
$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 ] } }
Zu diesem Zeitpunkt gibt es keine Die Lösung besteht darin, dass wir uns nur auf unser Verständnis von Redis verlassen und auf ähnliche Methoden verweisen können, um es zu verwenden, wie z bitop
public function bitOp( $operation, $retKey, ...$keys) {}
Posten Sie den letzten Methodenaufruf
$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();
Verwandte Empfehlungen:
Das obige ist der detaillierte Inhalt vonPHP erhält alle Attribute in einer Klasse basierend auf Reflektion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!