PHP 命名空间
[toc] //md 内容表
php 四大全局成员 常量 函数 类(接口) 默认是声明在全局空间中的
1. 命名空间的优缺点
- 优点 可以全局调用
- 缺点 不能重复命名
2. 命名空间的实例
namespace 需要写在脚本的顶部 必须是 php 的第一条指令(除了 declare 指令)
namespace phpcn\cart;
class Demo
{
public static function getSite()
{
return 'php中文网进阶课购物车<br>';
}
}
echo Demo::getSite();
// 查看Demo类的完全限定名称
// echo Demo::class;//phpcn\cart\Demo
namespace phpcn\order;
class Demo
{
public static function getSite()
{
return 'php中文网进阶课订单<br>';
}
}
echo Demo::getSite();
// 在一个空间中访问另外一个子空间中的成员 需要先回到全局空间再进入子空间
echo \phpcn\cart\Demo::getSite();
子空间和公共空间中存在同名的全局成员 函数 类 优先级 子空间>全局空间
function func1()
{
echo '我是公共空间中的函数'.__FUNCTION__,'<br>';
}
class Test
{
const APP_NAME = 'my blog';
}
3. use 在命名空间中的作用
- use 引入别的命名空间到当前空间 as 为引过来的命名空间起别名
- use 引入别的命名空间中的类到当前空间 as 为引过来的命名空间中的类起别名
namespace app\admin\controller;
// 控制器类 index
class Index{
public function index()
{
return __METHOD__;
}
}
namespace extend\lib;
// \ 代表根 root 空间
// echo (new \app\admin\controller\Index)->index();//app\admin\controller\Index::index
//1. use 导入命名空间
use app\admin\controller;
// 2. 成功导入命名空间以后 就可以不使用类的完全限定名称 来调用类元素
echo (new controller\Index)->index();//app\admin\controller\Index::index
// 3. 为空间起一个别名
use app\admin\controller as app;
echo (new app\Index)->index();//app\admin\controller\Index::index
echo '<hr>';
//使用use 导入别的空间中的类 可以为该类起别名
// use app\admin\controller\Index as Index ;
use app\admin\controller\Index as In ;
// echo (new Index)->index();
echo (new In)->index();
4. 自动加载带有命名空间的类
namespace app;
// 引入类的自动加载器 只是加载类文件
require 'app/admin/autoload.php';
// 起别名
use app\admin\controller\Login;
use app\admin\controller\User;
use app\admin\model\Login as LoginModel;
use app\admin\model\User as UserModel;
$loginController = new Login;
$loginModel = new LoginModel;
$UserModel = new UserModel;
$userController = new User;
echo $userController->index();
总结
- use 引入别的命名空间到当前空间 as 为引过来的命名空间起别名
- use 引入别的命名空间中的类到当前空间 as 为引过来的命名空间中的类起别名
use app\admin\model\Login as LoginModel;
- require 只能引入类文件
require 'app/admin/autoload.php';
- require 只能引入类文件
- require 和 use 配合使用可以实现自动加载带有命名空间的类