ReflectionClass
PHPを使用して親クラスが期待するものを内省することを提案する非常に有用な記事を見つけました。ここでは、 PHP –リフレクションクラス–親メソッドのシグネチャを決定します。
Stack Overflowでこのヒントを提供する回答が見つからなかったため、この自己回答の質問を記事のサンプルコード(私自身の拡張バージョン)とともに送信することにしました。
このスニペットを使用して、拡張しようとしているクラスの詳細を確認してください。
<?php
$className = 'PDO'; // the class you're trying to extend
echo "<pre>\n";
echo "CLASS : $className\n\n========\n\n";
$refClass = new ReflectionClass($className);
foreach ($refClass->getMethods() as $refMethod) {
echo "METHOD : " . $refMethod->getName(). "\n\n";
echo "getNumberOfParameters() : " . $refMethod->getNumberOfParameters() . "\n";
echo "getNumberOfRequiredParameters() : " . $refMethod->getNumberOfRequiredParameters() . "\n";
echo "\n";
foreach ($refMethod->getParameters() as $refParameter) {
echo $refParameter . "\n";
}
echo "\n--------\n\n";
}
echo "</pre>\n";
?>
PDO
これは、たとえばPHPのクラスの場合に出力されます。
CLASS : PDO
========
METHOD : __construct
getNumberOfParameters() : 4
getNumberOfRequiredParameters() : 3
Parameter #0 [ $dsn ]
Parameter #1 [ $username ]
Parameter #2 [ $passwd ]
Parameter #3 [ $options ]
--------
METHOD : prepare
getNumberOfParameters() : 2
getNumberOfRequiredParameters() : 1
Parameter #0 [ $statment ]
Parameter #1 [ $options ]
--------
METHOD : beginTransaction
getNumberOfParameters() : 0
getNumberOfRequiredParameters() : 0
[...]
リンクされた記事で、次のようなエントリがどのように表示されるかに注意してください。
string(37) "Parameter #1 [ <optional> $cache_cb ]"
<optional>
別のバージョンのPHP(PHP 5.3.13)を使用していたためか、基盤となるPDOライブラリに関するものであるかにかかわらず、(作成者のコードをそのまま使用して)出力に同様のマーカーが表示されませんでした。私の問題がオプションのパラメーターに関係しているのではないかと疑って、メソッドを使用してそれらを見つける別の方法を探しましたgetNumberOf*Parameters
(そして実際に私の疑いは正しいことが証明されました)。
もちろん、より多くの情報を出力したい場合は、他にも便利なリフレクション方法がたくさんあります。たとえば、、などを介したメソッドのアクセシビリティReflectionMethod::isPrivate
。ReflectionMethod::isProtected
最後に、クラスReflectionMethod
が拡張ReflectionFunctionAbstract
されることに注意してください。親クラスのメソッドも確認してください。