博客列表 >PHP命名空间和小案例

PHP命名空间和小案例

阿心
阿心原创
2020年05月06日 22:52:38670浏览

命名空间

  1. <?php
  2. //命名空间
  3. // 全局成员四大家族: 类, 接口, 函数, 常量
  4. namespace H5\C3
  5. {
  6. echo __NAMESPACE__,'<BR>';
  7. class Demo
  8. {
  9. const PRO_LANG = '当前语言是html+css3+js(PHP)';
  10. }
  11. }
  12. // echo Demo::PRO_LANG;
  13. namespace JS\CSS
  14. {
  15. class Demo
  16. {
  17. const PRO_LANG = '当前语言是html+css3+js(c++)';
  18. }
  19. class T1
  20. {
  21. const PRO_LANG = '我是T1';
  22. }
  23. class T2
  24. {
  25. const PRO_LANG = '我是T2';
  26. }
  27. }
  28. // namespace H5\JS;
  29. namespace H5\JS
  30. {
  31. class Demo
  32. {
  33. const PRO_LANG = '当前语言是html+css3+js(java)';
  34. }
  35. //当:在本命名空间里访问了没有的函数,类等的时候,会自动去全局空间找
  36. echo \Test::A(),'<br>';
  37. echo \Test::AA;
  38. echo '<br>';
  39. echo (new \Test1)->B();
  40. echo '<br>';
  41. }
  42. //创建匿名空间的话。上面所有命名空间应该改为使用{}
  43. namespace
  44. {
  45. //给空间取别名:(当引入的同一个空间比较多时,就可以使用命名空间)
  46. use JS\CSS as t;
  47. echo t\T1::PRO_LANG;
  48. echo '<br>';
  49. //或
  50. use JS\CSS\T2;
  51. echo T2::PRO_LANG;
  52. echo '<br>';
  53. echo \H5\C3\Demo::PRO_LANG;
  54. echo '<br>';
  55. echo \JS\CSS\Demo::PRO_LANG;
  56. echo '<br>';
  57. echo H5\JS\Demo::PRO_LANG;
  58. class Test
  59. {
  60. const AA ='试一试';
  61. public static function A()
  62. {
  63. return '我在这里会被调用';
  64. }
  65. }
  66. class Test1
  67. {
  68. public function B()
  69. {
  70. return '实例化看下';
  71. }
  72. }
  73. // echo (new Test1)->B();
  74. }

命名空间小实战(分别是三个文件)

这是:inc/lib/demo1.php

  1. <?php
  2. // 如果想实现自动加载,需要满足二个条件
  3. // 1. 命名空间必须和类文件所在的绝对路径一一对应
  4. // 2. 当前类名称与当前的类文件的名称完全一致
  5. namespace inc\lib;//条件1;
  6. class Demo1//条件2
  7. {
  8. public function Test()
  9. {
  10. return '当前文件是Demo1.php 。当前文件的类名称是Demo1';
  11. }
  12. }

这是:inc/lib/demo2.php

  1. <?php
  2. class Demo2
  3. {
  4. public function Test()
  5. {
  6. return '当前文件是Demo2.php 。当前文件的类名称是Demo2';
  7. }
  8. }

这是:inc/lib/demo3.php

  1. <?php
  2. class Demo3
  3. {
  4. public function Test()
  5. {
  6. return '当前文件是Demo3.php 。当前文件的类名称是Demo3';
  7. }
  8. }

封装自动加载

文件:autoload.php

  1. <?php
  2. //封装自动加载
  3. //spl_autoload_register — 注册给定的函数作为 __autoload 的实现
  4. try{
  5. spl_autoload_register(function($className){
  6. //1,先将类名空间的分隔符转为目录分隔符
  7. $path = str_replace('\\',DIRECTORY_SEPARATOR , $className);
  8. // 测试
  9. // echo $path;
  10. //生成加载类文件名称
  11. $file =__DIR__.DIRECTORY_SEPARATOR.$path.'.php';
  12. // 测试
  13. // echo $file;
  14. //3,加载这个文件
  15. require $file;
  16. });
  17. }catch(Exception $e){
  18. die($e->getMessage());
  19. }

执行文件。。OK完成!

  1. <?php
  2. require 'autoload.php';
  3. use inc\lib\Demo1;
  4. $demo1=new demo1;
  5. echo $demo1->Test();

总结:命名空间相对较简单,就是他的方法太多。对于我记性差的人来说,知道那么一两个可以用的就行了。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议