phpnamespace
比如有個 a.php 這樣定義
namespace np1; $foo = 'foo'; const foofoo = 'foofoo';
另外有個 b.php 這樣定義
namespace np2; $bar = 'bar'; const barbar = 'barbar';
在c.php定義
require "a.php" ; require "b.php";
$baz = np1\$foo; $qux = np2\$bar;
echo "$baz and $qux !"
三個檔案在同一目錄中,已經被正確require了,運行會出錯!
而c.php 中輸出a.php 和b.php 中的常量,比如c.php如下:
$baz = np1\foofoo; $qux = np2\barbar;
echo "$baz and $qux !"
則能正確輸出。
所以問題來了,怎樣才能在c.php通過命名空間標識使用a.php 和 b.php中的變數$foo和$bar .
好吧,是我問題沒有提清楚。試了下,直接 echo "$foo"; 是可以輸出的!但是既然
$foo是命名空間np1中定義的變數,為什麼在c.php中使用時不能加上命名空間的名字呢,比如這樣 echo np1\$foo;
但是相反,如果a.php 中定義了一個類和一個常量,比如a.php 這樣定義:
your name: $name, and your login time: $time
";} public function saysth(){ echo "echoing from function saysth of np1\C1
";}
}
在c.php檔案中可以通過命名空間np1使用檔案a.php中的常量 foofoo和類C1但是無法通過命名空間使用變數$foo .
比如c.php 這樣
require "a.php" ;
require "b.php";
$baz = new np1\C1("leon",time());
$qux = np1\foofoo;
$baz.saysth();
echo "$qux
";
上述c.php能夠正常使用np1中的類C1和常量foofoo, 但是為什麼不能通過np1\$foo 使用np1中的變數$foo 呢,搞不懂!不信大家可以試試.
設想一下如果b.php檔案和a.php檔案中同有名為$foo的變數 ,這樣在c.php 直接使用$foo而不加命名空間限定,程式怎麼判斷這個變數是哪個檔案定義的呢(我試了一下誰require在後輸出誰的變數)?