2013-01-10 37 views
12

是否可以使用Netbeans中的另一個documentor標記來擴展類型提示?PHP的擴展類型提示

我正在尋找一種方法來擴展帶有@scope標籤的類型提示,以允許包含的文件訪問對象作用域。

例子:

file: template.php 
<?php /* @var $this MyObject */ 

這將只允許公共變量和方法的類型提示。什麼我希望做的是擴展與@scope標籤允許它訪問的MyObject的範圍類型提示:

file: template.php 
<?php /* @scope MyObject */ 

這將使該文件內容像這將是在爲MyObject範圍和$this會提示私人方法。

現在,我沒有開發Netbeans平臺的經驗,但我有Java經驗。如果我想完成這個任務,我會從哪裏開始?

希望這不是一個問題太弱。

+0

我也在尋找幾乎類似的東西,在[鏈接](https://platform.netbeans.org/tutorials/nbm-java-hint.html#creatingthemoduleproject)中解釋。然而,我希望它的PHP,而鏈接只解釋瞭如何做到這一點爲java –

回答

2

在過去(NetBeans的舊版本),類型提示顯示了一個類(其中的對象正在使用)中的所有方法,即所有公共,受保護,私有,甚至是靜態方法。現在,在新版本的NetBeans中,此錯誤已得到修復,並且在對象上鍵入提示時,只有可訪問的方法/屬性被鍵入提示。

這僅僅是因爲你的模板不能訪問/調用類的私有屬性/方法,以及如果你有一個對象(一個類的實例)你不應該能夠訪問/調用它的類的靜態屬性/方法。

如果您願意在類中鍵入提示,現在類型提示列出了所有公共,受保護和私有方法$this->||是遊標),同時靜態屬性和方法仍然存在不在名單中。另一方面,如果您在MyClass::|上鍵入提示,現在只列出了靜態屬性/方法,並且在類別MyClass類中列出了所有公共,受保護和公用的列表,而在從外部訪問時列出了所有公共列表, (非常正確)在列表中缺失。

所以你要求的功能是錯誤的,並且否認封裝的正確原則。

+1

這可能是Java或其他語言,但PHP允許類的範圍擴展到另一個文件。這種行爲僅僅通過在一個類的方法中包含另一個文件來實現。在這種情況下,文件可以訪問封閉類的所有方法和屬性(甚至是私有的)。該機制與其他語言中的「partial classes」非常相似,除非它在PHP中沒有形式語法,並且必須使用類型提示。許多PHP框架的視圖模板通常使用這種機制。這是否是一種好的做法是另一回事。 –

+0

我會說它是一個非常好的做法,因爲您完全將代碼與標記分開。也就是說,我創建了視圖'CreateUserView - > CreateUserView.php',並與該文件一起,我還創建了模板作爲'CreateUserView.tpl.php',我的擴展視圖'CreateUserView'自動加載,模板是類的一部分具有相同的範圍。 – Daniel

0

我知道我們不應該提出任何工具,但有時我無法抵制人們試圖用錯誤的方法解決問題的感覺。在我看來,NetBeans正在慢慢遵循Eclipse的步驟,幾乎完全放棄了對PHP的支持。然而,其他IDE嚴格爲PHP語言設計,可以解決一些開箱即用的問題。

就我個人而言,我想要一個工具,可以從一開始就爲我提供最需要的功能。我對編寫插件不感興趣,這些插件花費我的時間,可能會隨着時間推移而被棄用。所以我選擇了一個商業化的IDE,這讓我獲得了更多的需求,順便說一句 - 它完美地滿足了您的需求。如果您打算編寫PHP代碼,那麼我強烈建議您考慮爲專業工具付費。

關於這個問題本身,我只是給一個功能請求的示例鏈接,它顯示瞭如何添加問題的問題:Allow protected member access on @var $this (i.e. in views)。還有更多related features,您可能會感興趣。

所以總結我的看法是:如果你要擰緊螺絲,然後使用螺絲刀,而不是錘子。