2012-08-28 53 views
3

有什麼辦法如何避免使用如此經常的反斜槓?如何從命名空間PHP調用全局函數類

現在,如果我使用的命名空間,並調用裏面的東西它全球的我必須使用反斜線:

namespace foo; 
$a = new \my\name(); // instantiates "my\name" class 
echo \strlen('hi'); // calls function "strlen" 
$a = \INI_ALL; // $a is set to the value of constant "INI_ALL" 

在這種情況下,裏面的代碼命名空間變得非常難看,有什麼辦法如何避免這種情況? ??

的例子是來自於該網址採取:http://www.php.net/manual/en/language.namespaces.faq.php

但是我的這個問題,如果我需要調用一些內置的類從命名空間,我有在名稱前使用反斜槓,可我不知怎麼避免呢?

+0

您不需要爲每個PHP的內置函數加上前綴。 – fdomig

+0

[命名空間文檔](http://php.net/manual/en/language.namespaces.php)真的很糟糕 – diEcho

回答

6

來自全局名稱空間的常量和函數不必與反斜槓相加。 PHP將自行回退到全局名稱空間。還有就是在PHP手冊一整章解釋這一點:

在命名空間內部,當PHP遇到不合格的名稱在類名,函數或常量背景下,解決了這些有不同的優先級類名稱始終解析爲當前名稱空間名稱。 [...]對於函數和常量,如果名稱空間函數或常量不存在,PHP將回退到全局函數或常量。

+0

是的,我應該怎麼處理異常,例如,或者類中的任何其他編譯?像memcached等...?如果我沒有使用反斜槓,即使是PHP構建的擴展類,它也不起作用。這意味着在代碼中有很多反斜槓:( – user1016265

+1

@ user1016265一個異常既不是一個函數,也不是一個常量,而是一個類,並且該手冊明確指出類名解析爲當前名稱空間名稱,因此您必須預先設置它們或 – Gordon

+4

然而,你確實需要在'\ Exception','\ Memcached'這樣的「本地」類中添加反斜槓,或者你可以選擇添加:'use \ Exception;'到頂部你的文件,然後你可以使用新的異常('..');'沒有反斜槓 – Michael

相關問題