Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:概念还是不太清楚 , 还要多做些这方面的练习, 希望在实战中进步
类
<?php
namespace demo;
class Demo{
function show_name(){
echo self::class;
}
}
接口
<?php
namespace demo\api;
interface IDemo{
public static function show_name();
}
函数(定义在全局范围)
<?php
namespace demo\lib;
function demo(){
echo __METHOD__;
}
常量(不受作用域的限制)
<?php
namespace demo\param;
const USER=array('name'=>'Lin','age'=>26);
<?php
require 'class.php';
require 'interface.php';
require 'function.php';
require 'const.php';
//完全限定名称访问类
echo \demo\Demo::class;
echo '<hr />';
//完全限定名称访问接口
class Demo2 implements \demo\api\IDemo{
static function show_name(){
var_dump(class_implements(self::class));
}
}
Demo2::show_name();
echo '<hr />';
//完全限定名称访问函数
echo \demo\lib\demo();
echo '<hr />';
//完全限定名称访问常量
echo \demo\param\USER['name'];
require
以及include
。默认导入的是类和接口,因此在导入函数和常量时,需要在use
后增加function
和const
)
<?php
//导入类
require 'class.php';
use \demo\Demo;
echo Demo::class;
echo '<hr />';
//导入接口
require 'interface.php';
use \demo\api\IDemo;
class Demo2 implements IDemo{
static function show_name(){
var_dump(class_implements(self::class));
}
}
Demo2::show_name();
echo '<hr />';
//导入函数以及别名引用
require 'function.php';
use function \demo\lib\demo as demoFunction;
echo demoFunction();
echo '<hr />';
//导入常量
require 'const.php';
use const \demo\param\USER;
echo USER['name'];
答:完全限定名称,从全局空间开始查找成员,把成员当做一个文件,可以看做是从根目录开始查找这个文件,类似绝对路径,如:\demo\lib\demo; 限定名称,从当前空间开始查找成员,把成员当做一个文件,可以看做是从当前的目录开始查找文件,类似相对路径,即名称前至少一个\
并且位置不位于第一个字符,如:lib\demo;非限定名称,仅在当前空间查找成员,把成员当做一个文件,可以看做是只在当前的目录中查找文件,类似当前路径,如:demo
答:使用use
可以完成,当写出完整的命名空间路径时,可以转为非限定名称;当写出部分的命名空间路径时,可转为限定名称;限定名称, 非限定名称转为完成限定名称,需补齐完整的命名空间路径
答:首先是限定名称与限定名称, 非限定名称之间的转换,其次简化在访问成员时命名空间完整路径的编写
答:::class
操作符返回的是完全限定名称,__NAMESPACE__
只返回当前的命名空间。具体的应用场景暂不确定。