2013-09-04 5 views
1

PHP 클래스에서 parent:: 정적 접근을 피하는 방법이 있습니까? 아니면이 시간 중 @SuppressWarnings(StaticAccess)을 사용 하시겠습니까?PHPMD는 부모에게 정적 액세스를 피하십시오

같은 줄에 의심스러운 곳에서 경고가 터져 나오고있는 것 같습니다. StaticAccess 예를 들어 예외 처리 - 내가 throw new Exception(...) 일 때, PHPMD는 정적 액세스에 대해 불평합니다. 그러나 ... 실제로 그것을 할 수있는 또 다른 방법은 없습니다 (그래서 발견했습니다). 그래서 나는 원하는 것보다 더 많은 경고 억압을했습니다. 이게 정상인가?

편집 요청으로

, 여기에 예입니다 - 그것은 매우 간단합니다 :

class aaa { 
    private $someReasonForAnException = true; 

    public function __construct() { 
     echo 'AAA<br>'; 
     if ($this->someReasonForAnException) { 
      throw new Exception("Something happened that's worth noticing!"); 
     } 
    } 
} 

class bbb extends aaa {  
    public function __construct() { 
     echo 'BBB<br>'; 
     parent::__construct(); 
    } 
} 

$BBB = new bbb(); 

PHPMD은 위의 두 오류를보고합니다 다음 ExceptionStaticAccess 오류 및 StaticAccess 오류에 parent::__construct() 전화.

피하기 위해 나는 두 클래스 모두 @SuppressWarnings으로 표시해야합니다.이 클래스는보기 흉한 것처럼 보이며 "실제"정적 액세스 문제도 표시하지 않습니다.

+0

코드를 게시하십시오 ... –

+0

@HenriqueBarcelos - 한 번 보셔 주셔서 감사합니다. – Ben

+0

정적 호출을하지 않습니다. 나는 이것을 버그로보고 할 것이다. –

답변

4

PHP에서 상위 메소드 구현을 참조 할 수있는 다른 방법은 없습니다. 당신의 코드에 아무런 문제가 없으며, PHPMD는 술에 취해 있습니다. PHP가 $this 변수를 참조하지 않으면 정적 메소드로 인스턴스 메소드를 호출 할 수 있기 때문에 정적 액세스에서 유일한 문제점이 있습니다.하지만 그렇게 할 필요는 없습니다. 이런 종류의 경고는 무시할 수 있습니다.

편집 :

이 같은이있는 경우 :

class Foo { 
    public function bar() { 
     echo 'bar'; 
    } 
} 
PHP는 당신이 할 수

:

class Foo { 
    private $bar = 'bar'; 
    public function bar() { 
     echo $this->bar; 
    } 
} 

Foo::bar(); // fatal error 
+0

좋은 소식은, 그렇 겠지요. PHP는 $ this 변수를 참조하지 않으면 인스턴스 메소드를 정적 메소드로 호출 할 수 있지만 그렇게 할 필요는 없다고 설명 할 수 있습니까? 나는 너의 요점을 잘 모르겠다.PHP는 기본적으로 인스턴스화를 정적 메서드라고 부릅니다. – Ben

0
:

Foo::bar(); // works 

을하지만이있는 경우

나는 많은 self :: fo를 사용하기 때문에 r 상수, self :: 및 parent ::를 수락하도록 phpmd 코드를 변경하십시오. 프로그램 PHP에서

/PMD가/규칙/CleanCode/StaticAccess.php 라인 (36)에서, 변화 :

if ($this->isReferenceInParameter($reference) 
    || $reference->getImage() === 'self' 
    || $reference->getImage() === 'parent' 
    ) { 
    continue; 
} 
+0

PHPMD를 업데이트해야하는시기는 언제입니까? ;) – Ben