2012-09-11 3 views
1

이 질문은 일반적으로 약 DocBlocks이지만 내 사용 사례는 PHP에 관한 것입니다.DocBlock 클래스 유형 상속

는 다음과 같은 PHP 코드를 고려

<?php 

class ParentClass { 
    /** 
    * Says 'hi' to the world. 
    * @return ParentClass Returns itself for chaining. 
    */ 
    public function say_hi(){ 
     echo 'hi'; 
     return $this; 
    } 
} 

class ChildClass extends ParentClass { 
    /** 
    * Says 'bye' to the world. 
    * @return ChildClass Returns itself for chaining. 
    */ 
    public function say_bye(){ 
     echo 'bye'; 
     return $this; 
    } 
} 

$c = new ChildClass; 
$c->say_hi()->say_b| <- type hinting won't suggest "say_bye" here 

?> 

이 일부 체인 그냥 사소한 클래스입니다. 확장 클래스는 부모 클래스의 docblock이 자식 클래스의 메서드/속성이없는 특정 클래스 이름을 사용하기 때문에 형식 힌트를 잃어 버립니다.

우리는 유형 힌팅 기능을 원한다고 가정 할 때 (그렇지 않은 경우이 질문을 남겨 두십시오. 여기서는 쓸모없는 주장이 필요하지 않습니다.) 어떻게 수정해야합니까? 단지

  • 를 수행하지 docblock 재 선언 할
  • 가 불필요한 say_hi 추가 특별한 키워드를 부모()를 호출 방법을 허용하는

    • 변경하는 PHPDoc 기준 :

      나는 다음과 같은 가능성을 함께했다 반환 유형을 전혀 지정하지 않으면 IDE가 무엇을 의미하는지 결정하게하십시오 (이것도 작동합니까?)

  • 답변

    2

    일반적으로 "유창한 인터 얼굴 "은 모든 객체의 메소드가 자신의 작업을 수행하고 객체 자체를 반환합니다.

    필자는 PHPDoc 가이드 라인을 정확히 보지 못했습니다. 따라서 IDE가 자동 완성 기능을 사용하여 유스 케이스를 처리 할 수있는 방법을 제시했음을 알지 못합니다.

    PHPDoc이 취할 가능성이있는 경로는 "@return $ this"를 코드 구문 자체와 일치하므로 매우 명확하므로 유창한 메서드를 나타내는 규칙으로 활용하는 것입니다. 표준 자체가이 사용 사례를 통합 할 때까지 모든 IDE가 해당 기능을 구현할 것입니다. 당신의 IDE 자동 완성 작동시킬 수있는, 단기적으로

    , 나는 당신의 불필요한 '{부모 :: say_hit()} ChildClass에 :: say_hi는() "이라고 생각합니다. 다시 말하면 일 수 있습니다. 자동 완성을 사용하면 메소드 체인 자체 (예 : $ foo-> bar() -> baz() -> roll() -> tide();)가 인식되지 않을 수 있습니다.

    +0

    "@return $ this'가 편리 할지라도 Netbeans에서는 잘 작동하는 것 같습니다 ... – Christian

    +0

    phpDocumentor 2.x는"@return self "및"@return $ this "를 인식하여 방법은 "유창한"방법입니다. 결과 문서에서 "Fluent Interface"메서드를 강조 표시하고 상속 된 부모 메서드를 표시하는 chlid 클래스 doc에 표시되는 반환 클래스 형식을 조정합니다. 일단 2.0.0 stable이 공식적으로 출시되면 IDE가이 구문에 대한 인식을 구현할 것입니다. 다행히 자동 완성 로직은 "유창한"인식과 메서드 상속을 올바르게 조정할 것입니다. – ashnazg

    2

    이 같은이 문제를 해결 할 수 있습니다

    class ParentClass { 
        /** 
        * Says 'hi' to the world. 
        * @return static 
        */ 
        public function say_hi(){ 
         echo 'hi'; 
         return $this; 
        } 
    } 
    

    제 1, 문 정확하게 당신이 원하는 수 있습니다 "정적 예외 :"PhpStorm 그것으로 잘 작동합니다.