Robert C. Martin의 "Clean Code"에 요약 된대로 깨끗한 코드를 읽고 쓰는 것을 선호합니다. 그의 신조를 따를 때 개발자 (API 사용자)가 배열의 내부 구조를 알도록 요구해서는 안됩니다.
API 사용자는 다음과 같이 질문 할 수 있습니다. 1 차원 배열 만 있습니까? 다차원 배열의 모든 수준에서 개체가 퍼져 있습니까? 모든 객체에 액세스해야하는 중첩 루프 (foreach 등)는 몇 개입니까? 해당 배열에 어떤 유형의 객체가 "저장"됩니까?
개요를 살펴보면 객체를 포함하는 해당 배열을 1 차원 배열로 사용하려고합니다.
Nishi에서 설명한대로 다음을 사용할 수 있습니다.
/**
* @return SomeObj[]
*/
그에 대한.
그러나 다시 한 번 명심하십시오-이것은 표준 docblock 표기법이 아닙니다. 이 표기법은 일부 IDE 제작자가 도입했습니다.
좋아, 개발자로서 "[]"가 PHP의 배열에 묶여 있다는 것을 알고있다. 그러나 일반적인 PHP 컨텍스트에서 "something []"은 무엇을 의미합니까? "[]"는 "something"내에 새 요소를 만듭니다. 새로운 요소는 모든 것이 될 수 있습니다. 그러나 당신이 표현하고자하는 것은 같은 유형과 정확한 유형의 객체 배열입니다. 보시다시피, IDE 제작자는 새로운 컨텍스트를 소개합니다. 배워야 할 새로운 맥락. 다른 PHP 개발자들이 (문서 블록을 이해하기 위해) 배워야 할 새로운 맥락. 나쁜 스타일 (!).
배열은 하나의 차원을 가지기 때문에 "객체 배열"을 "목록"이라고 부를 수 있습니다. "목록"은 다른 프로그래밍 언어에서 매우 특별한 의미를 갖습니다. 예를 들어 "컬렉션"이라고 부르는 것이 좋습니다.
기억하십시오 : OOP의 모든 옵션을 가능하게하는 프로그래밍 언어를 사용합니다. 배열 대신 클래스를 사용하고 클래스처럼 배열을 순회 가능하게 만듭니다. 예 :
class orderCollection implements ArrayIterator
또는 다차원 배열 / 개체 구조 내에서 다른 수준의 내부 개체를 저장하려는 경우 :
class orderCollection implements RecursiveArrayIterator
이 솔루션은 배열을 "orderCollection"유형의 객체로 대체하지만 IDE 내에서 코드 완성을 활성화하지는 않습니다. 괜찮아. 다음 단계:
docblock과의 인터페이스에 의해 도입되는 메소드를 구현합니다.
/**
* [...]
* @return Order
*/
orderCollection::current()
/**
* [...]
* @return integer E.g. database identifier of the order
*/
orderCollection::key()
/**
* [...]
* @return Order
*/
orderCollection::offsetGet()
다음에 유형 힌트를 사용하는 것을 잊지 마십시오.
orderCollection::append(Order $order)
orderCollection::offsetSet(Order $order)
이 솔루션은 다음과 같은 많은 도입을 중단합니다.
/** @var $key ... */
/** @var $value ... */
Zahymaka가 자신의 답변으로 확인한 것처럼 코드 파일 전체 (예 : 루프 내). API 사용자는 해당 docblock을 도입하여 코드를 완성하지 않아도됩니다. @return을 한 곳에서만 설정하면 중복 (@var)이 가능한 한 감소됩니다. "docBlocks with @var"을 뿌리면 코드를 읽을 수 없게됩니다.
마지막으로 당신은 끝났습니다. 힘들게 보입니까? 너트를 깨기 위해 망치를 타는 것처럼 보입니까? 그 인터페이스와 깨끗한 코드에 익숙하기 때문에 실제로는 아닙니다. 기억하십시오 : 소스 코드는 한 번 작성되고 많은 것을 읽습니다.
IDE의 코드 완성이이 방법으로 작동하지 않으면 더 나은 방법으로 전환하거나 (예 : IntelliJ IDEA, PhpStorm, Netbeans) IDE 제작자의 이슈 트래커에 기능 요청을 제출하십시오.
트레이너이자 훌륭한 자료를 가르쳐 주신 Christian Weiss (독일 출신)에게 감사합니다. 추신 : XING에서 나와 나와 만나십시오.