博客列表 >命名空间的声明与使用作业

命名空间的声明与使用作业

YHF的博客
YHF的博客原创
2018年09月10日 21:01:041077浏览

一.编程: 用大括号语法实现在一个脚本中创建多个命名空间并访问成员

实例

<?php
/**
 * 让全局代码与用户空间代码和平共处
 * 1.全局代码:之前我们使用\进行引用的
 * 2.用户代码:用namespace进行标识
 * 3.用户自定义命名空间,在空间标识符后有一队花括号之前的分号,'
 * 将属于该空间的代码全部放在花括号内
 * 4.全局空间的代码使用一个没有标识符的namespace关键字加花括号即可,将全局代码放在这对没空间标识符的花括号内
 *
 */
//1.声明一个命名空间One
namespace One{
    class test{
        public $name='小黑';
    }
    const COLOR='黑色';
    function say($food){
        return '她说她喜欢吃'.$food;
    }
}
//2.声明一个命名空间Two
namespace Two{
    class test{
        public $name='小白';
    }
    const COLOR='白色';
    function say($food){
        return '她说她不喜欢吃'.$food;
    }
}
//不能够这样写!
//因为当前脚本使用了命名空间,应该在全局命名空间内执行
//echo (new \One\test())->name;
//如果在一个新的命名空间内执行也是不对的\
//虽然看着是可以,但实际是不行的
namespace Three{
    echo (new \One\test())->name;
}
//声明一个全局空间,全局空间的命名只需要namespace关键字,不需要其他的标识符,不然就是错误
namespace {
    echo (new \One\test())->name;
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

demo3.jpg

二.编程:使用use 导入其它脚本中的类/常量/函数,并使用别名方式访问

实例

<?php
/**
 * 使用别名导入命名空间\
 * use关键字的使用
 */
//1.声明一个命名空间Three
namespace Three;
//use Three\Three_2\Three_3
//如果当前类也有一个同名的demo类,为导入的类取一个别名
use Three\Three_2\Three_3\demo as demo2;
include'./demo4.php';
use One\demo as demo3;

class demo{
    public $name='吕布';
}
const TEXT='三国';
function task($name,$task){
    return $name.'在'.$task;
}

//当前命名空间访问:Three\Three_2\Three_3空间中类
//必须添加很长的空间前缀
echo (new Three_2\Three_3\demo())->name;
echo '<hr>';
//两个结果相同
echo (new demo2())->name;
//引入另一个文件的命名空间One的demo类
echo (new demo3())->name;


//声明命名空间Three\Three_2\Three_3
namespace Three\Three_2\Three_3;
class demo{
    public $name='貂蝉';
}
const TEXT2='三国??';
function task2($name,$task){
    return $name.'不在'.$task;
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

demo5.jpg

三.问答: 非限定名称,限定名称和完全限定名称的命名空间之间的区别与联系是什么?

1.非限定名称,或不包含前缀的类名称,例如 $comment = new Comment();。如果当前命名空间是Blog\Article,Comment将被解析为Blog\Article\Comment。如果使用Comment的代码不包含在任何命名空间中的代码(全局空间中),则Comment会被解析为Comment。

2.限定名称,或包含前缀的名称,例如 $comment = new Article\Comment();。如果当前的命名空间是Blog,则Comment会被解析为Blog\Article\Comment。如果使用Comment的代码不包含在任何命名空间中的代码(全局空间中),则Comment会被解析为Comment。

3.完全限定名称,或包含了全局前缀操作符的名称,例如 $comment = new \Article\Comment();。在这种情况下,Comment总是被解析为代码中的文字名(literal name)Article\Comment。


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