목표 : PHP 프로그램에서 클래스 종속성에 대한 설명을 DOT Format 생성하는 데 관심이 있습니다.PHP 코드의 종속성 그래프를 생성하는 CodeSniffer 스 니프?
IDEA : PHP 소스에서 다음과 같은 패턴을 감지 할 수있는 CodeSniffer "냄새"를 쓰기 (및 DOT 기록을 방출) 열심히 안 :
class SomeClassName extends BasicClassName { // SomeClassName refers to BasicClassName
...
new OtherClassName(); // SomeClassName refers to OtherClassName
ThisClassName::some_method(); // SomeClassName refers to ThisClassName
ThatClassName::$some_member; // SomeClassName refers to ThatClassName
RandomClassName::some_constant; // SomeClassName refers to RandomClassName
...
}
하지만를 I 피난처 ' 어떤 공개 된 스 니프가이 정보 (그리고 내가 놓칠지도 모르는 "진짜"계급 의존 관계를 나타내는 다른 패턴)를 방출하는 것을 발견하지 못했습니다.
참고 : 내가 특별히 PHP의에 대해 하지 치료를 할 수는 include()와 require() 문 (whose behavior I'm not convinced is even well-defined). 이 질문의 목적을 위해 모든 PHP 클래스 분석이 autoloading을 통해 처리되고 정적 종속성 분석 만 사용하여 클래스 종속성 다이어그램을 작성한다고 가정 해 보겠습니다.
편집 : 불행하게도, 내가 처리 할 일반적인 방법을 볼 다음
class ThatClassName {
...
function generateClassName() {
// something too complicated to analyze statically...
}
function foo() {
$name = $this->generateClassName();
$instance = new $name; // ThatClassName refers to ... what?
...
}
...
}
그러나 물론 종속성과 ThatClassName을 보여 종속성 그래프에서이 시나리오를 대표 할 수있을 것입니다 generateClassName() 메소드에서 - 메소드 이름을 클래스 이름과 쉽게 구별 할 수 있도록 parens로 표시된다. 그리고 클래스 이름을 동적으로 생성하는 모든 메소드가 생성 될 수있는 모든 클래스 이름을 나타내는 annotation (연관된 주석에 있음)을 포함해야한다는 규칙을 설정하는 것은 좋지 않습니다. 이러한 "문서화 된 동적 종속성" 그런 다음 종속성 그래프에 자동으로 포함될 수 있습니다.
DOT 형식에 대한 링크가 죽었습니다. 문제를 해결하십시오. –
고마워, @ BobKruithof - 링크가 수정되었습니다. – Peter