我正在研究Magento模板,但這個問題將適用於任何模板加載系統。
由於這些模板是由模板引擎加載的,所以IDE(在這種情況下,Aptana)無法知道這是什麼對象類型。
潛在地,它可能有多個對象作爲單個模板可以被多個對象加載,但是忽略這個,正確的phpdoc語法是爲$ this對象指定一個特定的類?
我正在研究Magento模板,但這個問題將適用於任何模板加載系統。
由於這些模板是由模板引擎加載的,所以IDE(在這種情況下,Aptana)無法知道這是什麼對象類型。
潛在地,它可能有多個對象作爲單個模板可以被多個對象加載,但是忽略這個,正確的phpdoc語法是爲$ this對象指定一個特定的類?
你可以這樣定義它:
/* @var $this type */
其中類型是一個類名
需要明確的是,使用$此應該永遠只表示當前的對象上課,對吧?
PhpDocumentor當前不支持(v1.4.3)將$ this作爲一個特定關鍵字,它應該等同於該類本身的數據類型。
只有PHP已知的數據類型和已由PhpDocumentor解析的類纔是與@return標記一起使用的正確的數據類型值。有一項功能請求可以在PhpDocumtentor中提供某些選項,以幫助記錄總是「返回$ this」的流暢方法。 [1]
在@var標記的情況下,我看不出類變量如何包含自己的類實例。因此,我無法遵循「@var $ this」應該說的話。
但是,如果與$此你的意圖是的流暢方法不說:「返回$這個」,而只是被一些快捷方式的phpDocumentor和/或你的IDE神奇地猜測數據類型,你可能意思是使用$ this,我不得不猜測沒有辦法做到這一點。我可以做出的最接近的建議是使用父類的名稱,它是所有各種子類的通用父項,這些特定的var/return可以在運行時運行,然後使用標記的描述部分來內聯列出可能的子類的{@link}標籤。
例如:我有一個Parent抽象類,其中每個可能發生在我的運行時Foo類中的Child1,Child2和Child3子級。
因此,Foo :: _ var在運行時可以是任何這些子類類型,但是如何記錄它呢?
/** * @var Parent this could be any child of {@link Parent}, {@link Child1}, {@link Child2}, or {@link Child3}... */ protected $_var;
再回到「返回$此」的問題,我會以類似的方式記錄的東西:
/** * a fluent method (i.e. it returns this class's instance object) * @return Parent this could be any child of {@link Parent}, {@link Child1}, {@link Child2}, or {@link Child3}... */ public function foo() { return $this; }
文檔化這樣至少可以讓你的類文檔有鏈接到特定的類。它沒有做的是突出顯示流利的的性格。但是,如果您的IDE能夠識別類名稱,那麼它可能會與其他類進行必要的邏輯鏈接。如果您將鼠標懸停在標籤描述中的類名稱上,我認爲Eclipse至少可以通過彈出幫助完成此操作。我做而不是認爲Eclipse可以使用它來在代碼完成時使各種子類的方法可用。它會知道代碼完成的Parent方法,因爲我明確列出的數據類型是Parent,但是就IDE而言可以。
在這種情況下,我的問題來自框架內的模板系統。該模板基本上是php代碼的片段,它只在運行時才能獲得上下文。 因此,我基本上尋找一種語法來'愚弄'的Aptana IDE設置$ this的範圍爲特定的類類型,在Magento場景中所有模板派生自Mage_Core_Block_Template,因此能夠將它們鏈接到那將是一個好的開始,在大多數情況下,您可以更好地將模板x安全地鏈接到Custom_X_Block_Template。 – benz001 2010-02-27 07:23:41
我發現,定義與@var一個類型$這不起作用 - 大概是因爲$這是特殊的,由集錦對待。我對海報有類似的需求 - 我想 - 它是在模板文件中(我的情況簡單地位於數據類中的函數中),我希望爲此設置一個類型。正如@ashnazg所說的,在類定義中爲$ this設置類型是不需要的,因爲$ this的類型總是類的類型(直到繼承)。
但是,有一種模板文件的解決方法。在模板文件的頂部簡單地把像
/**
* @var My_Data_Model_Type
*/
$dataModel = &$this;
然後只需使用$dataModel
(或者不管你選擇稱呼它 - 或許真的更短),而不是$this
模板
謝謝,聽起來不錯,但在Aptana中不起作用 - 它將$ this識別爲關鍵字,並且不會將其鏈接到定義的var類型 – benz001 2010-02-27 07:16:37
在PhpStorm上工作得很好,雖然不在Eclipse Indigo和更低版本中......未在Juno上進行測試,那說。 – 2014-05-05 19:28:48