Correction status:Uncorrected
Teacher's comments:
0906作业
1.编程: 用大括号语法实现在一个脚本中创建多个命名空间并访问成员
<?php /* * 1.编程: 用大括号语法实现在一个脚本中创建多个命名空间并访问成员 * * 如何让全局代码与用户空间代码和平共处? * 1.全局代码:之前我们是用\进行引用的 * 2.用户代码:用namespace 进行标识 * 3.用户自定义命名空间,在空间标识符后有一对花括号代码之前的分号, * 将属于该空间的代码全部放在花括号内 * 4.全局空间的代码,使用一个没有标识符的namespace关键字加花括号即可,将 * 全局代码放在这对没空间标识符的花括号内 */ //1. 声明一个命名空间Score namespace Score { class Student { public $name = '柯南'; } const SITE = '期末考试成绩册'; function sum($Chinese, $Math) { return $Chinese + $Math; } } //2.声明命名空间: mark namespace mark { class Student{public $name='工藤新一';} const SITE = '期末考试成绩册'; function sum($Chinese, $Math) { return $Chinese + $Math; } } //如果执行Score空间中的代码? //这样可以吗?貌似可以,但实际不行的, //原因是:如果当前脚本使用了命名空间,那么里面的全部代码都必须使用命名空间进行声明和访问 //echo (new \one\Demo())->name,'<br>'; //再声明一个命名空间test namespace test { //如果执行Score空间中的代码? //这样可以吗?貌似可以,但实际不行的 echo (new \Score\student())->name,'<hr>'; } //例子:但是我的本意并不是想再生成一个命名空间,我只是想在全局空间执行一下某个空间中的代码罢了 //这就好比,你去电脑城只想买一个鼠标,结果老板说,鼠标不单买,必须买个电脑,鼠标是赠送的,这显然是不合理的。 //原来默认就是全局空间,不用加反斜线 namespace { echo (new mark\student())->name,'<br>'; }
点击 "运行实例" 按钮查看在线实例
2.编程:使用use 导入其它脚本中的类/常量/函数,并使用别名方式访问
<?php /* * 2.编程:使用use 导入其它脚本中的类/常量/函数,并使用别名方式访问 * 使用别名导入命名空间 * use 关键字的使用 */ //1. 声明一个命名空间score namespace Score ; //A\B\C\D\Student; //如果当前类也有一个同名的student类,怎么办?为导入的类取一个别名 use A\B\C\D\Student as Student1;//导入空间中的类的信息会覆盖当前空间中类的信息 //此刻相当于class Student1{public $name='工藤新一';} class Student { public $name = '柯南'; } const SITE = '期末考试成绩册'; function sum($Chinese, $Math) { return $Chinese + $Math; } //在当前空间访问: A\B\C\D空间中类 //必须要添加很长的空间前缀 //echo (new A\B\C\D\S)->name; //echo (new student)->name; echo (new Student1)->name; //2.声明命名空间:A\B\C\D namespace A\B\C\D; class Student{public $name='工藤新一';} const SITE = '期末考试成绩册'; function sum($Chinese, $Math) { return $Chinese + $Math; }
点击 "运行实例" 按钮查看在线实例
3. 问答: 非限定名称,限定名称和完全限定名称的命名空间之间的区别与联系是什么?
非限定名称:类似当前目录下访问
限定名称: 类似于相对路径访问
完全限定名称:从全局空间开始,类似于从根目录开始