Blogger Information
Blog 22
fans 1
comment 0
visits 17745
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
第十期PHP命名空间知识案例以及问答(2020-02-10)
齐齐
Original
791 people have browsed it

1.PHP命名空间实例演示

1.1全局成员通过完全限定名称访问

php代码
  1. //命名空间创建必须第一行
  2. namespace phpName;
  3. //完全限定名称访问类成员
  4. require "demo3.php";
  5. $result=\phpName\lib\Demo::Index();
  6. //完全限定名称访问接口
  7. require "demo4.php";
  8. class test implements \phpName\api\iPhp
  9. {
  10. static public function today()
  11. {
  12. return '类名:'.__class__;
  13. }
  14. }
  15. $result=test::today();
  16. //完全限定名称访问函数
  17. require "demo5.php";
  18. $result=\phpName\common\getFunction();
  19. //完全限定名称访问常量
  20. require "demo6.php";
  21. $result=\phpName\parma\MY_NAME;
  22. //格式化打印结果,字符串类型
  23. echo "<pre>".print_r($result,true)."</pre>";
运行结果

1.2全局成员导入

php代码
  1. //命名空间创建必须第一行
  2. namespace phpName;
  3. //导入类
  4. require "demo3.php";
  5. use \phpName\lib\Demo;
  6. $result=Demo::Index();
  7. //格式化打印结果,字符串类型
  8. echo "<pre>".print_r($result,true)."</pre>";
  9. //导入接口
  10. require "demo4.php";
  11. use \phpName\api\iPhp;
  12. class test implements iPhp
  13. {
  14. static public function today()
  15. {
  16. return '类名:'.__class__;
  17. }
  18. }
  19. $result=test::today();
  20. echo "<pre>".print_r($result,true)."</pre>";
  21. //导入函数
  22. require "demo5.php";
  23. use function phpName\common\getFunction;
  24. $result=getFunction();
  25. echo "<pre>".print_r($result,true)."</pre>";
  26. //导入常量
  27. require "demo6.php";
  28. use const phpName\parma\MY_NAME;
  29. $result=MY_NAME;
  30. //格式化打印结果,字符串类型
  31. echo "<pre>".print_r($result,true)."</pre>";
运行结果

1.3全局成员别名应用方式

test.php代码
  1. //命名空间创建必须第一行
  2. namespace phpName\school;
  3. class food{}
test1.php代码
  1. //命名空间创建必须第一行
  2. namespace phpName;
  3. //当前空间下定义类,只有什么没有实现
  4. class food{}
  5. require "test.php";
  6. use phpName\school\food as stFood;
  7. $result=stFood::class;
  8. //格式化打印结果,字符串类型
  9. echo "<pre>".print_r($result,true)."</pre>";
运行结果

2.命名空间问答题

2.1 完全限定名称, 限定名称与非限定名称?

完全限定名称:从全局空间开始查找成员,至少有一个命名空间分割符\,必须是第一个字符,有时候被省略。限定名称:从当前空间开始查找成员,至少有一个\,并且不是第一个字符。非限定名称:只会在当前空间中查找,不含空间名,整个名称里没有\。限定名称可以看做是完全限定名称的子集,在同一个空间下,非限定名称也可以看做是限定名称的子集。

2.2 完成限定名称与限定名称, 非限定名称之间的转换方式?

::class可以将非限定名称,限定名称转换成完整限定名称。完全限定名称转换成非限定名称,通过use导入转换。完全限定名称转换成限定名称,可以通过导入空间实现。

2.3 use 解决了什么什么?

全局成员在用use导入后,不再需要用过长的完全限定名称表示成员。

2.4 ::class操作符为什么比NAMESPACE好用? 具体应用场景有哪些?

只知道::class可以快速生成一个完全限定名称,最初用魔术常量__NAMESPACE__也是为了拼接出一个所需类名,至于使用具体场景查找无果。

3.学习总结

3.1 命名空间创建前,不允许有其他的脚本内容。

3.2 运行同一个命名空间的全局成员,可以分别在不同脚本,同名的全局成员在不同空间中有效防止命名冲突。

3.3 导入(use)+别名(as),解决当前类中成员与导入成员之间的冲突。

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