萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP6 的namespace 命名空間

PHP6 的namespace 命名空間

php有namespace或類似的東西的。對於發布類庫框架,或者構建大的程序來說是很重要的。可以避免類名和函數名沖突,又不用像Pear裡那樣把類名弄得老長。當初php5的測試版曾經出現過,後來正式發布時又取消了,讓我空歡喜一場。7月初,php6的snap裡又加入了namespace,希望這次不要再讓我空歡喜了。

  這次的namespace實現和當初的實現有所不同,更接近於C++的語法。

聲明namespace時在文件裡加上例如

namespace blogbus::test;

function foo(){
    echo "foo";
}

class Test{
    function bar(){
        echo "bar";
    }
}

  該文件中的類和函數:foo,Test就屬於blogbus::test的命名空間。在其他文件包含該文件後,可以用blogbus::test::foo()來調用函數,用blogbus::test::Test來使用類。如果只是這樣的話那打字還是很麻煩的。所以可以使用
import blogbus::test::Test;
之後就可以直接用Test了。也可以
import blogbus;
之後可以用test::Test來使用。可惜目前的實現沒有類似Java的import xxx.*; 或是python的from xxx import *;這樣的語法。要導入許多東西的時候還是有些麻煩。

   既然namespace是為了解決命名沖突的問題,那麼使用import來節省打字,保護鍵盤的時候還是需要避免import進來的東西和原有的東西重名的問題。所以import還可以這樣用:import blogbus::test::Test as Blogbus。這時,就可以用Blogbus這個名字來使用blogbus::test::Test。你可以$test = new Blogbus();然後echo get_class($test);看看結果,會發現輸出的仍然是blogbus::test::Test。

copyright © 萬盛學電腦網 all rights reserved