Blogger Information
Blog 29
fans 1
comment 0
visits 23168
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP命名空间和小案例
阿心
Original
672 people have browsed it

命名空间

  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();

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

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:先用起来, 一时难以理解 , 就先用, 用着用着就明白了
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post