命名空间,就是可以让一个程序里,可以出现重名的变量,以防止在多人开发过程中,出现因变量重名,而出错的情况。就好像定义了一个局部变量的范围一样,在这个范围内的函数和变量,无法直接被全局变量调用。
其具体使用方法:
- 在<?php 后的下一行声明,声明语句以 namespace 开头,随后是一个空格,然后是命名空间的名称,最后以 ;结尾
- 在namesapce 与<?php之间,除了declare以外,不可以用任何其他的语句。
- PHP 命名空间也允许指定层次化的命名空间的名称。允许用户在当前命名空间下,再开设多个子命名空间。例如在命名空间 namespace Wilin下,可以再设置子命名空间 namesapce Wilin\Model。
PHP 命名空间中的类名可以通过三种方式引用:
-
非限定名称,或不包含前缀的类名称,例如 $a=new foo(); 或 foo::staticmethod();。如果当前命名空间是
currentnamespace,foo 将被解析为 currentnamespace\foo。如果使用 foo
的代码是全局的,不包含在任何命名空间中的代码,则 foo 会被解析为foo。
警告:如果命名空间中的函数或常量未定义,则该非限定的函数名称或常量名称会被解析为全局函数名称或常量名称。 -
限定名称,或包含前缀的名称, 例如 $a = new subnamespace\foo(); 或
subnamespace\foo::staticmethod();。如果当前的命名空间是 currentnamespace,则 foo
会被解析为 currentnamespace\subnamespace\foo。如果使用 foo
的代码是全局的,不包含在任何命名空间中的代码,foo 会被解析为subnamespace\foo。 -
完全限定名称,或包含了全局前缀操作符的名称,例如, $a = new \currentnamespace\foo(); 或
\currentnamespace\foo::staticmethod();。在这种情况下,foo
总是被解析为代码中的文字名(literal name)currentnamespace\foo。
下面给出具体例子
<?php
namespace Wilin\Model {
class User {
print_r(__NAMESPACE__);
}
}
namespace Wilin\Model {
$a = new User;
//非限定名称,处与Wilin\Model空间中,解析为 Wilin\Model\User();
$b = new \Wilin\Model\User();
// 完全限定名称,处与Wilin\Model空间中,无论什么情况下,都将解析为 Wilin\Model\User();
}
namespace Wilin {
$a = new Model\User();
//限定名称,处于Wilin空间中,解析为 Wilin\Model\User();
$b = new \Wilin\Model\User();
// 完全限定名称,处与 Wilin 空间中,无论什么情况下,都将解析为 Wilin\Model\User();
}
$a = new User();
//处于全局命名空间中,将被解析为User();
//无法编译
$b = new Model\User();
//处于全局命名空间中,将被解析为 model\User();
//无法编译
$c = new \Wilin\Model\User();
// 完全限定名称,处与全局命名空间中,无论什么情况下,都将解析为 Wilin\Model\User();
?>
导入&别名
先给出一个个文件:file1.php
file1.php
namespace App\Wilin;
class user {
function user() {
print_r(__METHOD__);
print_r(__FILE__);
}
}
require "file2.php";
?>
如果file1.php没有设置命名空间,file2.php想要用user这个类,因为class user属于全局,因此直接$a = new user;就可以了。但实际上,class user并不属于全局,它在App\Wilin这么命名空间里,因此我们要是想要在file2.php中使用这个类,就需要在file2.php中,导入这个类。
导入是指使用 use 关键字告诉PHP我们想使用哪个命名空间、类、接口、函数和常量。
我们可以在file2.php中这样写:“use App\Wilin\user;”。 这样,就可以在另一个文件中,使用这样文件命名空间里的类了。
如果我们感觉类的名字有点长,或者想给它换个名字,我们可以使用关键字“as”。
use App\Wilin\user as U;
$a = new U();
参考链接 :
https://www.cnblogs.com/weiyalin/p/10385435.html