2010-02-24 54 views
2

我正在研究Magento模板,但這個問題將適用於任何模板加載系統。

由於這些模板是由模板引擎加載的,所以IDE(在這種情況下,Aptana)無法知道這是什麼對象類型。

潛在地,它可能有多個對象作爲單個模板可以被多個對象加載,但是忽略這個,正確的phpdoc語法是爲$ this對象指定一個特定的類?

回答

3

你可以這樣定義它:

/* @var $this type */ 

其中類型是一個類名

+0

謝謝,聽起來不錯,但在Aptana中不起作用 - 它將$ this識別爲關鍵字,並且不會將其鏈接到定義的var類型 – benz001 2010-02-27 07:16:37

+0

在PhpStorm上工作得很好,雖然不在Eclipse Indigo和更低版本中......未在Juno上進行測試,那說。 – 2014-05-05 19:28:48

0

需要明確的是,使用$此應該永遠只表示當前對象上課,對吧?

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而言可以。

[1] - http://pear.php.net/bugs/bug.php?id=16223

+0

在這種情況下,我的問題來自框架內的模板系統。該模板基本上是php代碼的片段,它只在運行時才能獲得上下文。 因此,我基本上尋找一種語法來'愚弄'的Aptana IDE設置$ this的範圍爲特定的類類型,在Magento場景中所有模板派生自Mage_Core_Block_Template,因此能夠將它們鏈接到那將是一個好的開始,在大多數情況下,您可以更好地將模板x安全地鏈接到Custom_X_Block_Template。 – benz001 2010-02-27 07:23:41

0

我發現,定義與@var一個類型$這不起作用 - 大概是因爲$這是特殊的,由集錦對待。我對海報有類似的需求 - 我想 - 它是在模板文件中(我的情況簡單地位於數據類中的函數中),我希望爲此設置一個類型。正如@ashnazg所說的,在類定義中爲$ this設置類型是不需要的,因爲$ this的類型總是類的類型(直到繼承)。

但是,有一種模板文件的解決方法。在模板文件的頂部簡單地把像

/** 
* @var My_Data_Model_Type 
*/ 
$dataModel = &$this; 

然後只需使用$dataModel(或者不管你選擇稱呼它 - 或許真的更短),而不是$this模板

相關問題