1.爲啥須要命名空間php
解決命名衝突問題。好比本身定義了一個類A,第三方也有一個類A,就能夠對本身在類設置一個命名空間,MYCLASS,這樣,訪問本身在類時候,就MYCLASS\A這樣訪問,就不會衝突。html
2 命名空間應用app
lib1 and lib2是須要導入的類庫ui
<?php // application library 1 namespace App\lib1; const MYCONST = 'App\Lib1\MYCONST'; function MyFunction() { return __FUNCTION__; } class MyClass { static function WhoAmI() { return __METHOD__; } } ?>
<?php // application library 1 namespace App\lib2; const MYCONST = 'App\Lib2\MYCONST'; function MyFunction() { return __FUNCTION__; } class MyClass { static function WhoAmI() { return __METHOD__; } } ?>
<?php //app1.php //一個全局空間 const MYCONST = 'MYCONST'; function MyFunction() { return __FUNCTION__; } class MyClass { static function WhoAmI() { return __METHOD__; } } echo MYCONST.'<br>'; echo MyFunction().'<br>'; echo MyClass::WhoAmI(); /* MYCONST MyFunction MyClass::WhoAmI */ //總結:在沒有別的命名空間下,命名空間是全局 ?>
<?php //app2.php //一個命名空間 namespace App\Lib1; const MYCONST = 'App\Lib1\MYCONST'; function MyFunction() { return __FUNCTION__; } class MyClass { static function WhoAmI() { return __METHOD__; } } echo MYCONST.'<br>'; echo MyFunction().'<br>'; echo MyClass::WhoAmI(); /* App\Lib1\MYCONST App\Lib1\MyFunction App\Lib1\MyClass::WhoAmI */ /* 總結: 在最開始定義命名空間以後,文件就只有一個命名空間,全部常量,類都屬於這個空間 */ ?>
<?php //app3.php //一個全局+一個命名 require "lib1.php"; const MYCONST = 'MYCONST'; function MyFunction() { return __FUNCTION__; } class MyClass { static function WhoAmI() { return __METHOD__; } } //1全局空間 echo MYCONST.'<br>'; echo MyFunction().'<br>'; echo MyClass::WhoAmI(); /* MYCONST MyFunction MyClass::WhoAmI */ //2手動設置全稱命名空間來調用對應元素 echo APP\lib1\MYCONST.'<br>'; echo APP\lib1\MyFunction().'<br>'; echo APP\lib1\MyClass::WhoAmI(); /* App\Lib1\MYCONST App\Lib1\MyFunction App\Lib1\MyClass::WhoAmI */ //使用use去調用對應元素 use APP\lib1; echo lib1\MYCONST.'<br>'; echo lib1\MyFunction().'<br>'; echo lib1\MyClass::WhoAmI(); /* App\Lib1\MYCONST App\lib1\MyFunction App\lib1\MyClass::WhoAmI */ /* 總結: 1.沒有使用命名空間時候,默認全局空間 2.使用全稱或者use空間+半稱均可以找到命名空間下面在元素 */ ?>
<?php //app4.php //use 別名 require "lib1.php"; require "lib2.php"; use APP\lib1 as l1; use APP\lib2 as l2; echo l1\MYCONST; echo l2\MYCONST; //App\Lib1\MYCONST //App\Lib2\MYCONST /* 總結: 使用use的別名功能 */ ?>
<?php //app5.php //use 類 require "lib1.php"; use APP\lib1\MyClass; echo MyClass::WhoAmI(); //App\lib1\MyClass::WhoAmI /* 總結: 使用use直接使用類 */ ?>
reference:spa
http://www.cnblogs.com/kuyuecs/p/3556421.html
https://www.sitepoint.com/php-namespaces-import-alias-resolution/code