博主信息
博文 60
粉丝 5
评论 3
访问量 81479
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP命名空间
longlong
原创
838人浏览过

1. 命名空间的两种写法

  1. <?php
  2. // 命名空间:方式一
  3. // namespace ns1;
  4. // namespace ns2;
  5. // namespace ns3;
  6. // namespace ; 会报错
  7. // 此种声明方式,不能在同脚本中声明匿名空间(全局空间)
  8. namespace ns1;
  9. interface iDemo
  10. {
  11. public function show();
  12. }
  13. class Demo implements iDemo
  14. {
  15. public $name = '果冻';
  16. public function show ()
  17. {
  18. return $this->name;
  19. }
  20. }
  21. $obj = new Demo();
  22. echo $obj->show(),'<hr>';
  23. // 普通写法
  24. // function ff ($obj)
  25. // 如果要声明函数中参数的类型,如下:
  26. // 1. 使用类名 Demo
  27. // function ff (Demo $obj)
  28. // 2. 使用接口名 iDemo,在有接口的的情况下,最好这样使用
  29. function ff (iDemo $obj)
  30. {
  31. echo $obj->show(),'<hr>';
  32. }
  33. ff($obj);
  34. // 在命名空间中访问其他命名空间中的成员
  35. namespace ns2;
  36. // \ : 表示全局空间
  37. $obj1 = new \ns1\Demo();
  38. echo $obj1->show(),'<hr>';
  39. \ns1\ff($obj1);

  1. <?php
  2. // 命名空间:方式二
  3. /*
  4. namespace ns1
  5. {
  6. //...
  7. }
  8. namespace ns2
  9. {
  10. //...
  11. }
  12. namespace
  13. {
  14. //...
  15. }
  16. */
  17. // 这样的方式就可以在同脚本中声明全局空间(匿名空间)
  18. namespace ns1
  19. {
  20. class Demo
  21. {
  22. public static function show ()
  23. {
  24. return __METHOD__;
  25. }
  26. }
  27. }
  28. namespace ns2
  29. {
  30. // 1. 访问ns1中的show()方法
  31. echo \ns1\Demo::show(),'<hr>';
  32. // 2. 查看当前类全名
  33. echo \ns1\Demo::class,'<hr>';
  34. }
  35. // 全局空间中访问时,可以省略第一个 \
  36. namespace
  37. {
  38. // 1. 访问ns1中的show()方法
  39. echo ns1\Demo::show(),'<hr>';
  40. // 2. 查看当前类全名
  41. echo ns1\Demo::class,'<hr>';
  42. // 因为有了全局空间, 那么全局成员的声明就不应该放在全局,而应该放在空间中
  43. // 因此,全局空间应该主要写对全局对象的调用
  44. }

2. 命名空间类名的引用

  1. <?php
  2. // 命名空间类名的引用
  3. namespace ns1;
  4. class Demo{}
  5. namespace ns2;
  6. class Demo{}
  7. namespace ns3;
  8. // 1. 限定名称:不从根开始但有路径(省略和当前空间名称相当的部分)
  9. echo \ns3\sub\Demo::class,'<hr>';
  10. echo sub\Demo::class,'<hr>';
  11. namespace ns3\sub;
  12. class Demo{}
  13. // 2. 完全限定名称:从根开始且有路径
  14. echo \ns1\Demo::class,'<hr>';
  15. // 3. 非限定名称:没有根也没有路径(当前空间)
  16. echo Demo::class;

3. 命名空间的别名

  1. <?php
  2. // 命名空间的别名
  3. namespace ns1;
  4. class Demo{}
  5. class Test{}
  6. namespace ns2;
  7. class Demo{}
  8. // 1. 空间级别名
  9. echo \ns1\Demo::class,'<hr>';
  10. use \ns1 as n;
  11. echo n\Demo::class,'<hr>';
  12. // 2. 类级别名
  13. use \ns1\Demo as d;
  14. echo d::class,'<hr>';
  15. // 3. 简写:前提是当前空间中不能有同名的类
  16. // use \ns1\Test as Test;
  17. use \ns1\Test;
  18. echo Test::class,'<hr>';
  19. // class Test{} 若有同名的类会报错
  20. // 4. 若在当前空间,可一省略 \
  21. use ns2\Demo as dd;
  22. echo dd::class;

4. 访问类和内置函数的区别

  1. <?php
  2. // 示例一:
  3. namespace ns1
  4. {
  5. function print_r ($arr)
  6. {
  7. return '我在打印 : '.implode(',',$arr);
  8. }
  9. // 1. 访问类时,都要加 \
  10. echo \Arr::NAME,'<hr>';
  11. // 2. 访问函数时
  12. // 2.1 若不加 \ ,访问到当前空间的自定义函数
  13. echo print_r(\Arr::$arr);
  14. echo '<hr>';
  15. // 2.2 若加 \ ,此时到了全局空间中查找,调用了PHP内置函数
  16. \print_r(\Arr::$arr);
  17. echo '<hr>';
  18. }
  19. namespace
  20. {
  21. class Arr{
  22. const NAME = '果冻';
  23. public static $arr = ['aa','bb','cc'];
  24. }
  25. }
  26. // 示例二:
  27. namespace ns2
  28. {
  29. function var_dump($name)
  30. {
  31. echo '我的名字叫 : ' . $name;
  32. }
  33. var_dump(\Arr::NAME);
  34. echo '<hr>';
  35. \var_dump(\Arr::NAME);
  36. }

5. 类的自动加载

  1. <?php
  2. // 类的自动加载
  3. try{
  4. spl_autoload_register(function($class){
  5. $path = str_replace('\\',DIRECTORY_SEPARATOR,$class);
  6. $file = __DIR__.DIRECTORY_SEPARATOR.$path.'.php';
  7. if (!(is_file($file) && file_exists($file)))
  8. throw new \Exception('不是文件名文件不存在');
  9. require $file;
  10. });
  11. }catch(Exception $e){
  12. die($e->getMessage());
  13. }
  14. echo inc\lib\test1::NAME,'<hr>';
  15. echo inc\lib\test1::show(),'<hr>';
  16. echo inc\lib\test2::class,'<hr>';
  17. echo inc\lib\test3::class,'<hr>';
  1. <?php
  2. // 1. 当前类的命名空间与当前类的文件路径对应起来
  3. namespace inc\lib;
  4. // 2. 类名必须与当前类文件名称相同
  5. class test1 {
  6. const NAME = '果冻';
  7. public static function show ()
  8. {
  9. return __METHOD__;
  10. }
  11. }

6. 总结

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:导图总结的很好
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学