php命名空间
Posted Debugor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php命名空间相关的知识,希望对你有一定的参考价值。
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/
以上是关于php命名空间的主要内容,如果未能解决你的问题,请参考以下文章