PHP namespace 和 use
一、使用namespace的目的
简单一句话: 防止类冲突
为什么会 类冲突?
    团队合作的项目中或个人项目中,有可能会建一些相同的类,当同事导入相同类文件时,此时new 一下就会产生error的错误
二、namespace的使用方法
- 1、namespace后命名的定义不区分大小写
namespace one 
namespace One 
namespace ONE
- 
2、没有定义命名空间,就理解为使用顶级命名空间。new类时,可以在类前加上反斜杠,也可以不加。 - person.php
 class person { function __construct() { echo 'this is person'; } }- index.php
 require_once('./person.php'); new person(); // this is person // new \person(); // this is person
- 
3、new类时,带上命名空间时,之间一定用反斜杠字符,而不是顺斜杠。 - person.php
 namespace App; class person { function __construct() { echo 'this is person'; } }- index.php
 require_once('./person.php'); new \App\person(); // 记住是反斜杠 App 前面可以不用加反斜杠
- 
4、命名空间声明后的代码便属于这个命名空间,即使有include或require也不影响(重点是对后半句的理解,具体看代码)。 - dog.php
 namespace Animal; class dog { public function __construct() { echo 'this is dog'; } }- person/person.php
 namespace person; require_once('../dog.php'); new \Animal\dog(); // Animal 前必须加反斜杠,如果不加的话就会变成person\Animal\dog ,因为Animal\dog 不属于person命令空间下 // new dog(); // error 因为 person 下没有dog 类
- 
5、同命名空间下,类的使用可以省略一部分命令空间前缀 - cat.php
 namespace Animal; class cat { public function __construct(){ echo 'this is cat'; } }- index.php
 namespace Animal; require_once('./cat.php'); new cat(); // 省略了\Animal 因为在同一个命名空间下 // new \Animal\cat() //
- 
六、一个php文件可以有多个namespace namespace test; echo 'zhai14'; namespace zhai; require './1.php';
三 使用use的目的:
    在命名空间字符串过长时,使用use可以相应的缩短命名空间    
四、如何使用use
- 
使用 use 导入类 - animal/dog.php
 namespace Animal; class dog { function __construct(){ echo 'this is dog'; } }- index.php
 require_once('./animal/dog.php'); // 加载php文件 use Animal\dog; // 导入dog 类 new dog();
- 
使用use 重命名类 - index.php
 require_once('./animal/dog.php'); use Animal\dog as cat ; new cat();
- 
使用use 导入类,方法,常量 
// PHP 7 之前版本需要使用多次 use 
use some\namespace\ClassA; 
use some\namespace\ClassB; 
use some\namespace\ClassC as C; 
use function some\namespace\fn_a; 
use function some\namespace\fn_b; 
use function some\namespace\fn_c; 
use const some\namespace\ConstA; 
use const some\namespace\ConstB; 
use const some\namespace\ConstC; 
// PHP 7+ 之后版本可以使用一个 use 导入同一个 namespace 的类 
use some\namespace\{ClassA, ClassB, ClassC as C}; 
use function some\namespace\{fn_a, fn_b, fn_c}; 
use const some\namespace\{ConstA, ConstB, ConstC}; 
五、总结
- namespace
为了防止类,方法,常量的冲突,将这些冲突的类,方法,常量划分到不同名称空间中,这样在use 使用时就不会产生冲突了
- use 使用的总结
1、在use 前 必须先导入 你需要使用类的文件
2、必须确保导入的文件是有namespace的,否则不能使用use
3、可对使用的类,方法,常量重命名
- 导入文件
想要使用另一个php文件的代码,就必须先加载导入文件,才可以使用,上面我们都通过require_once 导入文件的,
其实可以使用php 内置函数 spl_autoload_register,自动加载文件,无需手动加载。当然规则要写好,每次use 带入类时都会自动先加载文件的。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号