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