PHPに、特定のクラス(または関数)が定義されたPHPファイルを見つけることができるようになる反射/イントロスペクション/マジックがありますか?
言い換えると、PHPクラス、またはインスタンス化されたオブジェクトの名前があります。これをsomething(関数、リフレクションクラスなど)に渡したいと思います。クラスが定義されたファイルシステムパスを返します。
_/path/to/class/definition.php
_
(get_included_files())
を使用して、これまでに含まれていたすべてのファイルのリストを取得し、それらをすべて手動で解析できることがわかりましたが、1回の試行で多くのファイルシステムにアクセスします。
また、この情報をどこかにキャッシュする__autoloadメカニズムに追加のコードを書くことができることもわかっています。ただし、既存の__autoloadの変更は、私が考えている状況では制限されています。
これを行うことができる拡張機能を聞くのは面白いでしょうが、最終的には「ストック」インストールで実行できるものが欲しいです。
ReflectionClass
を試してください
例:
class Foo {}
$reflector = new \ReflectionClass('Foo');
echo $reflector->getFileName();
ファイル名が見つからない場合、これはfalse
を返します。ネイティブクラス。
namespacedファイルのReflectionClassの場合、次のようにプレフィックス「\」を追加してグローバルにします。
$ reflector = new\ReflectionClass( 'FOO');
または、ReflectionClassが定義されていない名前空間でエラーを生成します。 私は上記の回答にコメントする権利がなかったので、これを補足回答として書きます。
includeフォルダーがある場合は、$filename = ``grep -r "class $className" $includesFolder/*\
を実行することにより、 "class $ className"の "grep"にシェルスクリプトコマンドを実行でき、どのファイルが含まれているかが返されます。 PHP yaのためにそれを行うための魔法の関数があると思います。