批改状态:未批改
老师批语:
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. 问答: 非限定名称,限定名称和完全限定名称的命名空间之间的区别与联系是什么?
非限定名称:类似当前目录下访问
限定名称: 类似于相对路径访问
完全限定名称:从全局空间开始,类似于从根目录开始
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号