Existe alguma reflexão / introspecção / mágica no PHP que permitirá que você encontre o arquivo PHP onde uma determinada classe (ou função) foi definida?
Em outras palavras, tenho o nome de uma classe PHP ou um objeto instanciado. Quero passar isso para algo (função, classe de reflexão, etc.) que retorne o caminho do sistema de arquivos onde a classe foi definida.
/path/to/class/definition.php
Percebi que poderia usar ( get_included_files())
para obter uma lista de todos os arquivos que foram incluídos até agora e, em seguida, analisá-los todos manualmente, mas isso é muito acesso ao sistema de arquivos para uma única tentativa.
Também percebi que poderia escrever algum código adicional em nosso mecanismo __autoload que armazena essas informações em algum lugar. No entanto, modificar o __autoload existente está fora dos limites na situação que tenho em mente.
Ouvir sobre extensões que podem fazer isso seria interessante, mas, no final das contas, gostaria de algo que pudesse ser executado em uma instalação de "estoque".
fonte
Respostas:
Experimentar
ReflectionClass
Exemplo:
Isso retornará
false
quando o nome do arquivo não puder ser encontrado, por exemplo, em classes nativas.fonte
Para ReflectionClass em um arquivo com namespace , adicione um prefixo "\" para torná-lo global da seguinte maneira:
Ou então, irá gerar um erro chamado ReflectionClass em um namespace não definido. Eu não tinha o direito de comentar a resposta acima, então escrevo isso como uma resposta complementar.
fonte
se você tivesse uma pasta includes, você poderia executar um comando shell script para "grep" para "class $ className" fazendo:
$filename = ``grep -r "class $className" $includesFolder/*\
e ele retornaria o arquivo em que estava. Fora isso, não acho que haja mágica função do PHP para fazer isso por você.fonte