Czy w PHP jest jakaś refleksja / introspekcja / magia, która pozwoli ci znaleźć plik PHP, w którym zdefiniowano określoną klasę (lub funkcję)?
Innymi słowy, mam nazwę klasy PHP lub obiekt, którego instancja została utworzona. Chcę przekazać to do czegoś (funkcji, klasy odbicia itp.), Co zwróci ścieżkę systemu plików, w której zdefiniowano klasę.
/path/to/class/definition.php
Zdaję sobie sprawę, że mógłbym użyć ( get_included_files())
aby uzyskać listę wszystkich plików, które zostały do tej pory uwzględnione, a następnie przeanalizować je wszystkie ręcznie, ale to dużo dostępu do systemu plików za jedną próbę.
Zdaję sobie również sprawę, że mógłbym napisać dodatkowy kod w naszym mechanizmie __autoload, który gdzieś przechowuje te informacje. Jednak modyfikowanie istniejącego __autoload jest poza zasięgiem w sytuacji, o której myślę.
Słyszenie o rozszerzeniach, które to potrafią, byłoby interesujące, ale ostatecznie chciałbym coś, co można uruchomić w ramach instalacji „standardowej”.
źródło
Odpowiedzi:
Próbować
ReflectionClass
Przykład:
Zwróci to,
false
gdy nie można znaleźć nazwy pliku, np. W klasach natywnych.źródło
W przypadku ReflectionClass w pliku z przestrzenią nazw dodaj przedrostek „\”, aby był globalny w następujący sposób:
W przeciwnym razie wygeneruje błąd o treści ReflectionClass w niezdefiniowanej przestrzeni nazw. Nie miałem prawa komentować powyższej odpowiedzi, więc piszę to jako odpowiedź uzupełniającą.
źródło
jeśli masz folder include, możesz uruchomić polecenie skryptu powłoki „grep” dla „class $ className”, wykonując polecenie:
$filename = ``grep -r "class $className" $includesFolder/*\
i zwróci to plik, w którym się znajduje. Poza tym nie sądzę, aby istniała jakakolwiek magia funkcja dla PHP, aby zrobić to za Ciebie.źródło