
正文
php中命名空间namespace和use
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
对于面向对象编程而言,命名空间namespace和use的概念非常重要.
1.根命名空间是反斜线 \ ,有点类似linux中的根目录 / 的那种感觉,但使用var_dump()函数打印时其实是空字符串
var_dump(__NAMESPACE__);
//string(0) ""
2.而对于根下的子代命名空间,则会显示名称.
namespace App;
var_dump(__NAMESPACE__);
string(3) "App"
3.同一文件中可以有多个命名空间(仅从语法角度讨论).
<?php
namespace App;
var_dump(__NAMESPACE__);
namespace Admin;
var_dump(__NAMESPACE__);
namespace Shop;
var_dump(__NAMESPACE__);
//D:\workspace\mvc\test.php:3:
//string(3) "App"
//D:\workspace\mvc\test.php:5:
//string(5) "Admin"
//D:\workspace\mvc\test.php:7:
//string(4) "Shop"
4.在同一文件中,在某个命名空间中使用另一个命名空间的类.
<?php
namespace App;
var_dump(__NAMESPACE__);
namespace Admin;
var_dump(__NAMESPACE__);
class A{
public static $name = 'classA';
}
namespace Shop;
var_dump(__NAMESPACE__);
echo \Admin\A::$name;
//D:\workspace\mvc\test.php:3:
//string(3) "App"
//D:\workspace\mvc\test.php:5:
//string(5) "Admin"
//D:\workspace\mvc\test.php:10:
//string(4) "Shop"
//classA
在命名空间Shop中使用命名空间Admin的类A,需要在Admin前方加反斜线 \ ,表示从根命名空间查找,如果没有最前面的反斜线,则会报错.
5.文件A引入了另一个文件B,文件A中的命名空间不受影响.
文件B:
<?php
namespace App;
var_dump(__NAMESPACE__);
namespace Admin;
var_dump(__NAMESPACE__);
class A{
public static $name = 'classA';
}
namespace Shop;
var_dump(__NAMESPACE__);
echo Admin\A::$name;
文件A:
<?php
require 'B.php';
var_dump('k'.__NAMESPACE__.'k');
//string(2) "kk"
文件B中定义了很多命名空间,当文件A引入文件B后,并没有受到影响.
6.在文件2中使用文件1中某个命名空间的类
<?php
/*
** 1.php
*/
namespace A;
class Test{
const N = 1;
}
namespace B;
class Test{
const N = 2;
}
<?php
/*
** 2.php
*/
require_once '1.php';
echo \A\Test::N;//1
echo PHP_EOL;
echo \B\Test::N;//2
<?php
/*
** 2.php
*/
require_once '1.php';
use \A\Test;
echo Test::N;//1
echo PHP_EOL;
echo B\Test::N;//2






