博客列表 >第十期PHP命名空间知识案例以及问答(2020-02-10)

第十期PHP命名空间知识案例以及问答(2020-02-10)

齐齐
齐齐原创
2020年02月12日 16:58:02797浏览

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),解决当前类中成员与导入成员之间的冲突。

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