클래스 생성자에서 호출자 메서드 이름을 가져 오는 방법 get_called_class()는 인스턴스화 된 확장 클래스의 이름을 알려주지 만 어떻게 메소드 이름을 가져올 수 있습니까? 그 계급에서 불렀어? debug_backtrace()가 좋은 해결책이 아니기 때문에 프로덕션 상태에서이 값이 필요합니다.debug_backtrace를 사용하지 않고 __construct에서 호출 된 함수 이름을 얻는 방법
0
A
답변
1
왜 필요한가요? 프로젝트 및 표준의 다른 코더에 대해 고려 사항이있는 경우 이 아닌 솔루션을 찾아이 호출 된 방법을 알 수 있도록 생성자에게 요구하십시오. 다른 모든 솔루션이 실패하면 정적 팩토리 메서드를 정의하고 생성자를 인스턴스화에 대한보다 많은 제어를 위해 비공개로 만듭니다.
0
debug_backtrace() 함수를 사용하지 않으려는 경우, 예외를 포착하여 역 추적을 얻을 수도 있습니다.
는하지만 어쨌든 ... 또한 추한 : 당신은 발신자가 필요한 이유
try
{
throw new Exception();
}
catch(Exception $e)
{
print_r($e->getTrace());
}
모르겠어요. 어쩌면 다른 논리를 사용하여이 문제를 해결할 수 있습니다.
그것은 역 추적을 받고보다 더해야 ...
편집
예외가 throw 할 필요가 없습니다. 그 부분을 유감스럽게 생각합니다.
그래서 당신은 간단하게 사용할 수 있습니다
$e = new Exception();
print_r($e->getTrace());
그러나 다시 한번, 당신이 사용할 필요가 없습니다!
0
debug_backtrace()
없이는 얻을 수없는 것처럼 보입니다. 그래도이 기능을 만들 수 있습니다. manual에서 예 :
function get_caller_method()
{
$traces = debug_backtrace();
if (isset($traces[2]))
{
return $traces[2]['function'];
}
return null;
}
0
가 느린/추한 debug_backtrace보다이 다른 일을하거나 생성자에 인자로 이름을 전달하는 자동적 인 방법은 없습니다 ....하지만 당신이 정말로이 건설되어서는 안된다 클래스에 대한 종속성의 종류.
관련 문제
- 1. 타이머를 사용하지 않고 정의 된 초 후에 함수 호출
- 2. 이동에서 함수 이름을 얻는 방법?
- 3. ResultSet을 사용하지 않고 ResultSetMetaData를 얻는 방법
- 4. 제네릭을 사용하지 않고 유형 정보를 얻는 방법?
- 5. 이름을 사용하지 않고 모두 해결
- 6. iOS : Mercurial을 사용하지 않고 ZipKit을 얻는 방법?
- 7. COM DLL의 서수에서 함수 이름을 얻는 방법
- 8. 포인터 이름을 얻는 방법
- 9. 속성 이름을 얻는 방법?
- 10. dlsym을 사용하지 않고 리눅스에서 함수 삽입하기
- 11. 호출 할 함수 이름을 찾는 방법은 무엇입니까?
- 12. 전달 된 함수 이름을 paremter로 확인하는 방법
- 13. saveas 대화 상자를 사용하지 않고 응답 파일 이름을 설정하는 방법
- 14. 파이썬으로 만료 된 도메인 이름을 얻는 방법
- 15. 핸들에서 이벤트 이름을 얻는 방법
- 16. EntityReference.Load()를 사용하지 않고 수동으로 EntityReference를로드하는 방법
- 17. 클래스 이름을 얻는 방법?
- 18. HttpRequest를 사용하지 않고 호스트 이름을 가져옵니다.
- 19. .NET에서 호출 된 함수 디버깅
- 20. 함수 이름을 반환하는 방법?
- 21. Python : 평가판을 사용하지 않고 동적으로 함수 인수를 생성하는 방법
- 22. 공유 목록에 열 이름을 사용하지 않고 버전을 삭제하는 방법
- 23. 매직 문자열을 사용하지 않고 메서드 이름을 유지하는 방법
- 24. 맹 글링 된 이름을 통한 P/호출 함수
- 25. 지역 이름을 얻는 방법?
- 26. 드라이버 이름을 얻는 방법?
- 27. JAX-RS를 사용하지 않고 웹 서비스 호출
- 28. 비누를 사용하지 않고 웹 서비스 호출
- 29. NotifyIcon.ContextMenu를 사용하지 않고 시스템 트레이 기능을 얻는 방법?
- 30. 이벤트를 사용하지 않고 아이폰에서 터치 위치의 배열을 얻는 방법?
사용법은 다음과 같이 간단하게 사용하십시오 :'$ e = new Exception; $ e-> getTrace()'? 추적을하려면 던져 질 필요가 있습니까? – NikiC
나는 그렇게 생각했다. 그러나 나는 방금 테스트를했고, 아니, 그것은 던져 질 필요가 없다. – Macmade