php命名空间使用总结

命名空间解决了一个命名的问题。试想一下,两个程序员都写了一个函数,不凑巧的是,他们的给函数起的名字是一样的。这样程序就就没法区别该用那个函数了。命名空间就是用来解决这样的问题的。php的命名空间可以解决三种命名的冲突。分别是 函数const 定义的常量。需要注意的是没有变量和define定义的常量

相关的常量和关键字

常量或者关键字 含义
NAMESPACE 编译时候的一个常量,表示当前的命名空间
namespace 指定当前行,下面的代码,使用的是那个命名空间。 一个文件中可以有多个命名空间,多个文件也可以共用一个命名空间
use 导入别名,相当于起个别名

一个简单的示例

file: a.php

<?php
namespace  myname;

function f() {
    echo __FUNCTION__;
}

file: test.php

<?php
include "a.php";
myname\f();
#\myname\f();

输出的结果是 myname\f
可以看到,在命名空间下的函数,的名字里是包含命名空间的名字

命名空间介绍

如果使用命名空间,比如写在代码的第一条,并且之前不能有输出。
错误的示例

<html>
<?php 
namespace myname;

一个命名空间可以用在多个文件中,这样多个文件就公用了一个命名空间。在同一个命名空间下的函数、类、常量之间可以直接使用。不需要用 \来指定命名空间。都是当前的命名空间。
同一个命名空间的示例

<?php

namespace myname;
function f() {
    echo __FUNCTION__;
}

f(); # 不需要指定命名空间。
\myname\f(); # 指定命名空间
# myname\f(); 错误的写法

可以看到有两种写法都是正确的。

如果命名空间过长,怎么缩写书写的长度

这里需要明白两个问题。第一:命名空间的解析规则是什么。第二:使用别名。
解析分为三类 给目录很类似. 非限定的 相当于"当前目录", 完全限定 相当于"绝对路径"限定名称 相当于 "相对路径"

需要注意的地方

  1. 命名空间对 define 定义的常量 没有作用
  2. 对于函数和常量来说,如果当前命名空间中不存在该函数或常量,PHP 会退而使用全局空间中的函数或常量。
  3. 类存在不一定可以用

程序会报错

namespace myname;
if (class_exists("ArrayObject")) {
    new ArrayObject();
}

发表评论

邮箱地址不会被公开。