博客列表 >PHP命名空间

PHP命名空间

逃逃
逃逃原创
2021年08月22日 23:26:53543浏览

PHP 命名空间

[toc] //md 内容表

php 四大全局成员 常量 函数 类(接口) 默认是声明在全局空间中的

1. 命名空间的优缺点

  • 优点 可以全局调用
  • 缺点 不能重复命名

2. 命名空间的实例

namespace 需要写在脚本的顶部 必须是 php 的第一条指令(除了 declare 指令)

  1. namespace phpcn\cart;
  2. class Demo
  3. {
  4. public static function getSite()
  5. {
  6. return 'php中文网进阶课购物车<br>';
  7. }
  8. }
  9. echo Demo::getSite();
  10. // 查看Demo类的完全限定名称
  11. // echo Demo::class;//phpcn\cart\Demo
  12. namespace phpcn\order;
  13. class Demo
  14. {
  15. public static function getSite()
  16. {
  17. return 'php中文网进阶课订单<br>';
  18. }
  19. }
  20. echo Demo::getSite();
  21. // 在一个空间中访问另外一个子空间中的成员 需要先回到全局空间再进入子空间
  22. echo \phpcn\cart\Demo::getSite();

子空间和公共空间中存在同名的全局成员 函数 类 优先级 子空间>全局空间

  1. function func1()
  2. {
  3. echo '我是公共空间中的函数'.__FUNCTION__,'<br>';
  4. }
  5. class Test
  6. {
  7. const APP_NAME = 'my blog';
  8. }

3. use 在命名空间中的作用

    1. use 引入别的命名空间到当前空间 as 为引过来的命名空间起别名
    1. use 引入别的命名空间中的类到当前空间 as 为引过来的命名空间中的类起别名
  1. namespace app\admin\controller;
  2. // 控制器类 index
  3. class Index{
  4. public function index()
  5. {
  6. return __METHOD__;
  7. }
  8. }
  9. namespace extend\lib;
  10. // \ 代表根 root 空间
  11. // echo (new \app\admin\controller\Index)->index();//app\admin\controller\Index::index
  12. //1. use 导入命名空间
  13. use app\admin\controller;
  14. // 2. 成功导入命名空间以后 就可以不使用类的完全限定名称 来调用类元素
  15. echo (new controller\Index)->index();//app\admin\controller\Index::index
  16. // 3. 为空间起一个别名
  17. use app\admin\controller as app;
  18. echo (new app\Index)->index();//app\admin\controller\Index::index
  19. echo '<hr>';
  20. //使用use 导入别的空间中的类 可以为该类起别名
  21. // use app\admin\controller\Index as Index ;
  22. use app\admin\controller\Index as In ;
  23. // echo (new Index)->index();
  24. echo (new In)->index();

4. 自动加载带有命名空间的类

  1. namespace app;
  2. // 引入类的自动加载器 只是加载类文件
  3. require 'app/admin/autoload.php';
  4. // 起别名
  5. use app\admin\controller\Login;
  6. use app\admin\controller\User;
  7. use app\admin\model\Login as LoginModel;
  8. use app\admin\model\User as UserModel;
  9. $loginController = new Login;
  10. $loginModel = new LoginModel;
  11. $UserModel = new UserModel;
  12. $userController = new User;
  13. echo $userController->index();

总结

    1. use 引入别的命名空间到当前空间 as 为引过来的命名空间起别名
    1. use 引入别的命名空间中的类到当前空间 as 为引过来的命名空间中的类起别名

use app\admin\model\Login as LoginModel;

    1. require 只能引入类文件

      require 'app/admin/autoload.php';

    1. require 和 use 配合使用可以实现自动加载带有命名空间的类
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议