2014-12-19 1 views
2

PHP 5는 일부 (제한적) type hinting을 수행 할 수 있지만 실제 프로젝트에서는 형식이 일반적으로 문서 주석으로 설명됩니다. 대신이의 예를 들면 다음과 같습니다PHP 형식 힌트 - 코드 대 주석

/** 
* Test method 
*/ 
function test(SomeType $param1) { 
    ... 
} 

은 더 일반적으로 두 가지 방법의 장점과 단점은 무엇인가

/** 
* Test method 
* 
* @param SomeType param1 
*/ 
function test($param1) { 
    ... 
} 

있을 것인가? 그리고 PhpDoc 방법이 더 일반적이라는 가정에 맞으면 왜 그럴까요? 사람들이 내장 언어 기능을 더 활용하지 않는 이유는 무엇입니까?

편집 : 나는 개인적으로 너무 자주 사용 (심포니 또는 phpunit을 같은 라이브러리를 보았다) 보지 못했다이는 것,

/** 
* Test method 
* 
* @param SomeType param1 
*/ 
function test(SomeType $param1) { 
    ... 
} 

을하지만 : 세 번째 옵션은 결합 된 두 가지 접근 방식을 사용하는 것입니다 솔직히 더 많은 이익을위한 일을하지 않는 것. 어쩌면 그것이 더 자주 보이지 않는 이유 일 수 있습니다.

+0

첫 번째로'@param SomeType $ param1'을 사용할 수도 있습니다. 그리고 그것은 당신이'SomeType'보다 다른 타입의 타입을 넘기는 것을 방지합니다. 두 번째는 phpDoc에서만 보여줄 것이지만'$ param1'은 어떤 타입이든 가능합니다. – vaso123

+0

좋은 지적, OP를 업데이트했습니다. – Borek

+0

자동 완료 기능이있는 IDE를 사용하는 경우 힌트 인라인을 입력하여 수시로 편리하게 사용할 수 있습니다./* @var $ somevar \ YourNamespace \ YourObject */ – Jon

답변

1

개인적으로 나는 둘 다 사용합니다.

첫 번째 옵션은 메서드에 전달할 개체를 제어하는 ​​데 적합합니다. 둘째 보통은 현대 IDE에 의해 자동으로 추가 될 수 있으며 코드를 더 읽기 쉽게 만듭니다.

2

첫 번째 사항 : PHP 유형 힌트에는 PHPDoc과 다른 힌트 기능이 있습니다. 차이는 (최소) :

  • 스칼라 유형입니다. 아무 힌트의

    /** 
    * @param string $param Param description 
    */ 
    
  • 배열을 암시에서 당신을 방해하지 않습니다 동안 PHP에서는, 스칼라 유형을 암시 수 없습니다. PHPDoc에서는 그 매개 변수 (또는 반환 값)가 무엇인가의 배열임을 암시 할 수 있습니다. 그것은 다음과 같습니다

    /** 
    * @param ClassName[] $param Param description 
    */ 
    

    및 이것의 의미는 - ClassName의 인스턴스의 배열입니다. 이는 반환 유형에 대해 매우 유용합니다 (IDE가 해당 배열의 반복에서 메서드를 대체 할 수 있으므로 올바른 작업을 수행하고 있음을 알 수 있습니다). 그러나 PHP에서는

    function functionName(array $param) { /*...*/ } 
    

    과 같이 입력 할 수 있으므로 배열의 실제 요소를 인식 할 수 없습니다. 귀하의 정보를 위해서는 타입 힌팅을위한 RFC이 현재 일부 요소의 배열로 존재합니다. 현재는 거부 될 수 있습니다. 그러나 앞으로는 이러한 가능성이 PHP에 나타날 수 있습니다.

하지만, 다른 한편으로는, PHP의 typehints를 사용하는 것은 여전히 ​​다른 일이며, 일반적으로 당신이해야 모두 - 그래서, 그것은 PHP에서 어떻게 든 암시 할 수 있다면 (같은 위의 배열 샘플) -, 그것을하고 PHPDoc 블록도 추가하십시오. PHP 유형 힌트를 사용하면 언어 수준에서 동작을 적용 할 수 있지만 PHPDoc은 "정보"소스 일뿐 정보 목표만을 제공하고 불법적 인 인수 유형을 넘길 수는 없습니다.

+0

좋은 점은 확실하지 않습니다. 마지막 단락에 대해서. 이론적으로는 두 유형의 유형 힌트를 모두 가지고있는 것이 바람직하지만 실용 상 너무 많은 가치를 부여하지는 않습니다. 적어도 내가 보는 방식이므로 실제 프로젝트를 보면 저도 그렇지 않은 것 같습니다. 혼자. – Borek

+0

하지만 덧붙입니다. 인스턴스의 배열을 가지고 있다면, PHP와 PHPDoc에 입력 힌팅을 할 것입니다. 그래서 적어도 배열이 아닌 배열을 함수 (언어 레벨)로 전달할 수 없으며, 다른 한편으로는 IDE 대체 기능을 사용할 수 있습니다. 그렇기 때문에 PHP 타입 힌트는 제한적이지만 들어오는 매개 변수 유형을 좁힐 수있는만큼 사용할 수 있습니다. –

+1

실행 시간에 유형 *을 실제로 적용하면 * 형식 힌트를 코드 자체. 그것을 PHPDoc에 두는 것은 일반적인 관행입니다. PHPDoc *이 PHP 타입 힌팅보다 먼저 나오기 때문에 PHPDoc에 의해 * 문서화 된 * 유형을 갖는 것이 코드가 무엇을 기대 하는지를 아는 사용자와 관련하여 가장 좋은 방법이었습니다. 문서 생성기는 대개 PHPDoc 정보가 True 정보이고 PHPDoc이 주어지지 않으면 코드 자체로 돌아가지만 사용합니다. IDE는 대개 같은 동작을 따릅니다. – ashnazg