标签:
1.为啥需要命名空间
解决命名冲突问题。比如自己定义了一个类A,第三方也有一个类A,就可以对自己在类设置一个命名空间,MYCLASS,这样,访问自己在类时候,就MYCLASS\A这样访问,就不会冲突。
2 命名空间应用
lib1 and lib2是需要导入的类库
<?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:
http://www.cnblogs.com/kuyuecs/p/3556421.html
https://www.sitepoint.com/php-namespaces-import-alias-resolution/
标签:
原文地址:http://www.cnblogs.com/wz0107/p/5641611.html