2014-12-06 116 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代碼中的某些HTML方面(例如,在表單中聲明的​​ID或表單中的元素)。這可以讓我在發送給最終用戶之前在我的HTML中具有可見性。

+1

1)PHPDoc本身對方法/屬性名稱沒有'* wildcart支持,**全部**。因此您必須手動聲明每種方法2)在PhpStorm中,您可以降低此類警告消息的優先級或完全禁用此類檢測 – LazyOne 2014-12-06 22:41:39

+0

@LazyOne感謝您的確認! – 2014-12-06 23:22:42

回答

4

這個問題在尚未解決的列表中仍然存在,所以我要回答它。

對於PhpStorm良好的代碼智能使用自動神奇的方法,如__get()__call()時崇高,則需要包括@property@method專線爲您添加的每個隱含屬性或方法。我知道這很糟糕,但這是使用這種方法的代價。

如果你真的得到足夠的錢,請考慮使用__get()。這對您的應用可能是正確的,在這種情況下,它可以。當我們試圖對對象數據進行進一步處理或抽象時,我們通常會使用它(,例如駱駝案例名稱轉換)。您可以保存一些代碼(其中PhpStorm將爲您編寫),但您需要在該類中編寫PhpDoc DocBlock行。

考慮包括所有的行,如果沒有其他原因,比記錄你的班級。使用隱式屬性,您不僅使IDE難以知道哪些方法和屬性是有效的成員,而且會讓下一位維護人員感到困難。那些docblock行看起來可能是多餘的,但它們是很棒的文檔。

+0

感謝最近的答案 - 我有點想通了這一點,並忘記了這個問題:)對於我的具體用例來說,將所有內容添加到DocBlocks是相當困難的,所以我接受IDE集成並不完美,爲了代碼簡單。 – 2015-06-23 21:31:36

+0

羅傑。我發現有時候我會得到諸如session或post變量抽象的類,在這裏添加所有@properties將會很荒謬。然而,在其他時候,這很好。如果有一個正則表達式來定義有效的屬性名稱,它肯定會很好。至少我們可以從o型檢測中受益。 – 2015-06-23 21:40:21

+0

絕對同意!在此期間,我會嘗試忽略Php風暴中的那些紅線,並希望最好:) – 2015-06-24 12:27:56