この記事では、リフレクションに基づいてクラス内のすべてのメソッドを取得するための PHP を主に紹介し、リフレクション メカニズムを使用してクラス内のすべての属性とメソッドを取得するための手順と関連する注意事項をサンプルの形式で詳細に分析します。この記事の次の
例は、PHP がリフレクションに基づいてクラス内のすべてのメソッドを取得する方法を説明しています。以下のように、参考のために全員と共有してください:
ソースコードもドキュメントも含まないクラス (特に、mysqli、Redis クラスなどの php 拡張機能によって提供されるクラス) を使用する場合、このクラスで提供される内容をどのようにして知ることができますか?どのメソッドとどのように各メソッドを使用するかで、PHP の強力なリフレクションが機能します。以下は、Redis 拡張機能を例として使用したコードのデモです。
さらに、特定のメソッドの使用方法とそれに含まれるパラメータを知りたい場合は、上記の例の bitpos メソッドを例として、このメソッドについてさらに検討することができます (このメソッドの使用方法はドキュメントでは紹介されていません) )<?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は必要なパラメーターを認識しませんでした。これはメソッドの特定の実装に関連している可能性があります。具体的な理由は、redis 拡張機能のコード実装でのみ確認できます。通常の状況では、mysqli の select_db メソッドを使用して、次のフォームが返されるはずです。 redis を作成し、同様のメソッド (bitop など) を参照して使用してください
echo '---------------------params-----------------------' . PHP_EOL . PHP_EOL; $reflectMethod = $ref->getMethod('bitpos'); //传入方法名即可 echo $reflectMethod; // 会调用$reflectMethod->__toString() 返回可打印的形式;最後のメソッド呼び出しを投稿します
---------------------params----------------------- Method [ <internal:redis> public method bitpos ] { }楽しいですね!
以上がPHP は、リフレクションを通じてクラス内のすべてのメソッドを取得する方法を説明しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。