2012-03-15 84 views
12

在PHP中,我在類級別使用名稱空間。但是,Netbeans一直告訴我命名空間我的全局函數。例如,如果我輸入我應該在PHP中命名空間全局函數嗎?

str_replace('stuff'); 

那麼NetBeans將建議其更改爲:

\str_replace('stuff'); 

這是一個PHP的建議,或只是Netbeans的是過分熱心?我一直無法在PHP文檔中找到任何說明。

我看不到它導致代碼中的任何問題。但是,在不知道爲什麼它首先推薦它的情況下,忽略Netbeans是不對的。但是如果不知道這是正確的做法,改變我的編碼習慣也不是不對的。

+0

Ì我不知道有任何此類官方建議。它可能是你使用的編碼慣例的一部分嗎? – Gordon 2012-03-15 14:37:54

+0

我看到它的方式是,如果您在代碼中使用名稱空間並從其他名稱空間調用全局函數(您可能必須),但是如果您沒有在任何地方使用名稱空間,那麼這樣做沒有意義。 – h00ligan 2012-03-15 14:39:51

+0

@ h00ligan在PHP手冊中沒有提到這樣的內容,但它肯定沒有必要,因爲PHP將在功能調用中回退到全局範圍。 – Gordon 2012-03-15 14:41:46

回答

5

有一個在

沒有這樣的建議,也不需要使用全局IDENTIFER因爲PHP將回退到全局函數定義時,有中沒有這個名字的功能當前的命名空間。

就這樣說,添加標識符的唯一原因是爲了讓它更加明確,您希望使用實際的全局事物來防止有人在當前名稱空間中添加一個具有相同名稱的函數時代碼行爲的意外更改。

您可能需要在Netbeans Mailing List上詢問有關IDE爲什麼會提供此功能的更多詳細信息。

1

過度熱情,但我不能重現這是NetBeans 7.0.1,與PHP插件1.17.1。不管怎樣,這不是公約,我根本不認爲這是最佳做法。

+0

奇怪 - 我沒有改變任何默認值。確切的消息是'修復名稱爲'\ str_replace''。 – 2012-03-15 14:43:53

+0

所以,它似乎是更高版本的問題。因爲我有NetBeans 8.1 - 就像用戶@Blowski所說的那樣。 – 2016-02-15 10:07:35

0

NetBeans是根本就沒有解決如下命名空間as documented的記錄規則:

  1. 全局類(如日期時間)必須合格,否則,PHP將尋找在當前命名空間中的類。
  2. 如果全局函數(如array_filter)和常量不存在於當前名稱空間中,它們將在全局名稱空間中找到(沒有顯式限定)。

換句話說,你的代碼應該被視爲習慣性基於成文規則。