2014-12-06 11 views
3

최근에 HTML 요소를 생성하기위한 클래스를 만들었습니다. 기존의 모든 HTML 요소와 속성에 대한 메소드를 작성하는 것을 고민하는 대신, 나는 __get과 __call이라는 매직 메소드를 사용하기로 결정했다.동적 마법 속성 (또는 메소드)을위한 PHPdoc

$signUpForm->insert->input->type('text')->name('firstName')->maxlength(100)->disabled 
$signUpForm->insert->input->type('email')->name('emailAddress')->maxlength(100) 

을하지만,이 "마법"간단하게 유지하기로 결정하기 때문에, 나는이 할 수 : 그래서 내 코드와 나는 기본적으로이 작업을 수행 할 수 있습니다

$signUpForm->insert->magic->trick('rabbit')->accessory('hat') 것이 될 것이다을 입력 :

<magic trick='rabbit' accessory='hat'> 

제 생각에는 많은 상용구 코드를 줄이고 정확하게해야 할 일이 있기 때문에 이것은 모두 좋은 것입니다. 클래스가 HTML 표준을 적용하기를 원하지 않는다. HTML을 쉽게 사용할 수있는 클래스가 필요하다. 사용법을 알면 (솔직히 코드는 작다.)

내 클래스는이 클래스를 고려한다. 정의되지 않은 속성이나 메소드를 받아 들일 수 있습니까? PHPDoc에서이 동작을 지정하는 방법이 있습니까? 그 이유를 궁금해하는 경우에도

...

/** 
* @property HtmlElementAttribute * Insert a new HTML element attribute 
* @method HtmlElementAttribute * Insert a new HTML element attribute 
*/ 

이 그냥 PHPStorm 것입니다하지만 난 아무데도 유사한 시나리오를 찾을 수 있다면 나도 몰라 : 나는 운이없이 다음을 시도 나는 그런 일을 할 것이고, 그것은 나의 PHP 코드 (form 내에 선언 된 ID들 또는 form 내부의 요소들)의 특정 HTML aspect를 추적하는 것이다. 이렇게하면 최종 사용자에게 보내기 전에 HTML에서 가시성을 확보 할 수 있습니다.

+1

1) PHPDoc 자체에는 메소드/속성 이름에 대해 '*'wildcart 지원이 없습니다. 따라서 수동으로 각 메소드를 선언해야합니다. 2) PhpStorm에서 이러한 경고 메시지의 우선 순위를 낮추거나 검사를 완전히 비활성화 할 수 있습니다. – LazyOne

+0

@LazyOne 확인을 해 주셔서 감사합니다! –

답변

4

아직 답변이없는 목록에서 질문이 너무 어려워서 답변을 드리겠습니다. PhpStorm에서 좋은 코드 인텔리전스

또는 __get()__call() 같은 자동 마법의 방법을 사용하는 경우 숭고한 , 당신은 당신이 추가하는 각 암시 적 속성이나 메서드에 대한 @property 또는 @method 라인을 포함해야합니다. 나는 이것이 빤다는 것을 압니다 만, 그러한 방법을 사용하는 것은 비용입니다.

__get()을 사용할 때 고려해 보시기 바랍니다. 그것은 귀하의 애플 리케이션에 대한 권리, 어떤 경우 괜찮아요 수도 있습니다. 우리는 객체 데이터 (카멜 케이스 이름 변환과 같은 )에 대한 추가 처리 또는 추상화를 수행하려고 할 때 주로 사용합니다. 어떤 코드를 저장하면 (PhpStorm이 당신을 대신해서 쓸 것입니다.) 코드에 PhpDoc DocBlock 줄을 써야합니다.

다른 이유가없는 경우 모든 행을 포함하여 클래스를 문서화하는 것이 좋습니다. 암시 적 속성을 사용하면 IDE가 유효한 멤버 인 메서드와 특성을 알기가 어려워 질뿐만 아니라 다음 유지 관리자가 어려워집니다. 이러한 docblock 라인은 불필요한 것처럼 보일 수 있지만 훌륭한 문서입니다.

+0

늦게 답변 해 주셔서 감사합니다. - 지금 생각해 보면이 질문에 대해 잊어 버렸습니다. :) IDE 통합이 DocBlocks에 모든 것을 추가하는 것은 꽤 어려울 것입니다. 코드 단순성. –

+0

로저 그. 세션이나 변수 변수 추상화와 같은 클래스가 있는데, 모든 @properties를 추가하는 것이 어리석은 경우가 종종 있습니다. 그러나 다른 때에는 좋은 일입니다. 올바른 속성 이름을 정의하는 정규식 옵션이 있다면 확실히 좋을 것입니다. 적어도 우리는 type-o 탐지의 이점을 누릴 수 있습니다. –

+0

분명히 동의합니다! 그 동안 나는 PHP 폭풍과 그 희망에 대한 그 빨간 선을 무시하려고 최선을 다하겠습니다 :) –