爲何要使用命名空間。php
大量的開發者編寫了大量的函數庫,意味着在一個空間下會有重名的類。使用命名空間避免衝突致使異常。函數
<?php namespace cart; function getCart() { echo "coke\n"; }
cart.phpspa
<?php namespace user; function getName() { echo "jun\n"; }
user.phpcode
<?php //命名空間 // 文件都引用到這個文件中,模擬單入口登陸 // 以後看看命名空間如何調用函數方法或者對象的 // index.php user.php cart.php // namespace 必須在文件開始的時候就聲明,並且不用引號 // 若是申明瞭文件的命名空間,那麼下次調用的時候必須聲明文件所在的命名空間(包)才能調用 namespace index; include("user.php"); include("cart.php"); //namespace user; getName(); //Fatal error: Call to undefined function index\getName() in D:\code\demo\index.php on line 14 namespace user; getName(); //jun namespace cart; getCart(); //coke
<?php namespace usr\foo; echo __NAMESPACE__;// usr\foo;
######################################################對象
cart.php作用域
<?php namespace cart; class Cart { function __construct() { echo "coke\n"; } }
user.php開發
<?php namespace user; class User { function __construct() { echo "jun\n"; } }
index.phpget
<?php // use 來聲明命名空間的別名 include("cart.php"); $c = new cart\Cart(); // coke include("user.php"); $u = new \user\User();//以反斜槓開始的是絕對命名空間, //從根命名空間開始搜索,而不是當前命名空間 // jun use \user as u; //使用別名來簡化書寫,若是沒有as 那麼默認別名是最後一個斜槓後面的名字 $u = new u\User();
調用方式io
1,namespace Name; 對象名function
2 , Name+ 反斜槓+對象名
當前命名空間名
__NAMESPACE__
使用別名
use alias\use as use 或者 alias\use 不用as時默認 use 爲別名
從根命名空間開始查找匹配(樹根則是無名的全局命名空間)
反斜槓+名字 \use\foo
反過來想一想,是否對任何的php代碼都能使用命名空間,
回去查手冊:雖然任意合法的PHP代碼均可以包含在命名空間中,但只有三種類型的代碼受命名空間的影響,它們是:類,函數和常量。
咱們只能用命名空間操做類,函數,和常量
什麼叫命名空間?
命名空間是對做用域的一種特殊的抽象,它包含了處於該做用域內的標識符,且自己也用一個標識符來表示,這樣便將一系列在邏輯上相關的標識符用一個標識符組織了起來。
(固然不少時候咱們使用的生產環境尚未到5.3或者因爲其餘緣由沒有使用命名空間,那麼也可使用PEAR包的命名規則)