博客列表 >02月10日作业:命名空间和访问方式

02月10日作业:命名空间和访问方式

李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰
李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰原创
2020年02月12日 17:53:44865浏览

作业

1.知识点:

(1)关键字:
-namespace:命名空间(必须写在脚本的第一行)
-__NAMESPACE__:魔术常量,返回当前空间名称
-__CLASS__:返回一个“完全限定名称”的类名称
-__FUNCTION__:返回一个“完全限定名称”的函数名
-__METHOD__:返回一个“完全限定名称”的类中方法名
-::CLASS:返回具有完全限定的类名
(2)导入和别名:
a、导入关键字:use \完全限定名称的全局成员(默认从全局开始,可以省略\)
b、常见的加载函数:include|require 导入不同于加载
c、别名:use \demo as de;(如果导入的成员名字和别名名字一直,可以省略as,直接使用),别名用具解决导入后的命名冲突。

作业一:问答题

一、
1.完全限定名称:从全局空间开始查找、类似绝对路径 例如:use \part1\Demo\function
2.限定名称:从当前空间开始查找,类似相对路径 例如:use namespace\Demo\function
3.非限定名称:仅在当前空间进行查找,类似当前路径 例如: use Demo\Class
二、
1、非限定名称和限定名称可以直接转化成完全限定名称,
2、非限定名称主要使用在同命名空间下,不同脚本之间成员访问。
3、限定名称主要使用在,在同命名空间下,不同子命名空间中成元的访问,(至少有一个‘\’,不能在开头)
4、完全限定名称,主要使用在不同命名空间之间称员的访问,从根空间开始查找必须有‘\’开头
三、
1、导入关键字:use (加载:include|require)
在脚本中加载外部脚本后,为了简化成员的调用和使用,可以用use关键字直接导入成员,然后就可以直接使用(不需要在写冗长的完全限制名称了.
别名关键字:as 解决导入简化完全限定名称造成命名冲突 例如:use \part1\Demo as Demo;
四、
1、::class:直接返回的完全限定的类名,而__NAMESPACE__:直接返回的当前空间名称
2、在php代码中,一般都是直接调用的类,很少单独调用空间的,所以一般都时直接使用::class,但有些时候考虑到命名空间名称修改,可以使用:__NAMESPACE__.\Demo\function;

作业二:编程题

代码:

php文件1:demo0.php

  1. <?php
  2. namespace part1\con;
  3. //常量
  4. const SITE='中文网';
  5. //在php7+允许define创建数组常量,但不支持命名空间
  6. define('CITY',['name'=>'中国','time'=>'2020']);
  7. namespace part1\func;
  8. //函数
  9. function sum(int $a,int $b):string {
  10. return '$a*$b='.($a*$b);
  11. }
  12. namespace part1\cla;
  13. // 类
  14. class Demo {
  15. public $city='郑州';
  16. public $age;
  17. public function __construct($age){
  18. $this->age=$age;
  19. }
  20. public function get_info(){
  21. return '我在'.$this->city.$this->age.'年';
  22. }
  23. }
  24. // $a=new Demo(5);
  25. // $c=$a->get_info();
  26. // echo $c;
  27. //接口
  28. namespace part1\api;
  29. interface Itest {
  30. public static function hello();
  31. }

代码

  1. <?php
  2. // 匿名类:只是用一次
  3. namespace part1;
  4. echo (new class ('李老师'){
  5. public $name;
  6. // 构造方法
  7. public function __construct($name)
  8. {
  9. $this->name = $name;
  10. }
  11. })->name;
  12. echo '<br>';
  13. // 类型约束:函数和方法参数和返回值
  14. function sum(int $a,int $b):string {
  15. return '$a+$b='.($a+$b);
  16. }
  17. $c= sum(5,10);
  18. echo $c.'<br>';
  19. echo __NAMESPACE__;
  20. echo '<hr>';
  21. // 四类全局称员的访问方式
  22. echo "<h1>四类全局称员的访问方式</h1>";
  23. require 'demo0.php';
  24. $s= \part1\con\SITE;
  25. $s1= CITY['time'];
  26. $f= \part1\func\sum(3,5);
  27. echo $s,$s1;
  28. echo $f.'<br>';
  29. use \part1\cla\Demo;
  30. $C=new Demo(5);
  31. echo $C->get_info();
  32. echo '<br>';
  33. class Test implements \part1\api\Itest
  34. {
  35. public static function hello(){
  36. return __FUNCTION__;
  37. }
  38. }
  39. $a=Test::hello();
  40. echo $a;
  41. // 导入四类全局成员及别名的使用
  42. echo "<h2>导入四类全局成员及别名的使用</h2>";
  43. //别名和导入成员名字一样,可以省略;
  44. use const \part1\con\SITE;
  45. echo SITE;
  46. use function \part1\func\sum as ride;
  47. echo ride(3,5);
  48. echo $s,$s1;
  49. echo $f.'<br>';
  50. use \part1\cla\Demo as D;
  51. $C=new D(5);
  52. echo $C->get_info();
  53. echo '<br>';
  54. use \part1\api\Itest as I;
  55. class Test1 implements I
  56. {
  57. public static function hello(){
  58. return __FUNCTION__;
  59. }
  60. }
  61. $a=Test1::hello();
  62. echo $a;

结果图:

总结:

1、导入常量和函数时:use 要跟const和function,然后在跟完全限制名称
2、导入的成员的别名和成员名一样时,可以省略as别名,直接使用;
3、全局成员有:类、接口、函数、常量
4、class_implements();:查询接口
6、self::class:返回当前类的完全限定名称;
7、define()可以设置数组常量,默认在全局空间(php7+);

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