• Welcome to Journal web site.

我是 PHP 程序员

- 开发无止境 -

Next
Prev

PHP 命名空间

Data: 2018-04-13 18:16:42Form: JournalClick: 11

# PHP 命名空间

  • 命名空间: 解决全局成员的命名冲突问题, 借鉴了文件目录的思想
  • 目录: 同一目录下不允许重名文件, 但不同目录下, 允许同名文件存在
  • 空间: 同一空间内不允许成员重名, 但不同空间内, 允许同名成员存在

# 一、命名空间

  • 解决全局成员的命名冲突问题
function php(){

}
function php(){

}

# 二、创建命名空间

  • 命名空间使用 "namespace" 关键字声明
namespace one{
    function php(){

    }
}
namespace two{
    function php(){

    }
}
namespace three;
function php(){

}

namespace four;
function php(){

}

# 三、常量、函数、类

namespace one{
    const NAME = '灭绝师太';
    $name = '灭绝师太';
    function php(){

    }
    class phpcn{

    }
}
namespace two{
    const NAME = '西门大官人';
    $name = '西门大官人';
    function php(){

    }
    class phpcn{

    }
}
namespace three{
    echo $name;
    echo NAME;
    php();
    new phpcn();
}

# 四、子命名空间

namespace{
    const NAME = '灭绝师太';
    function php(){

    }
    class phpcn{

    }
}
namespace one{
    const NAME = '西门大官人';
    function php(){

    }
    class phpcn{

    }
}
namespace one\two{
    const NAME = '西门大官人';
    function php(){

    }
    class phpcn{

    }
}
namespace one\two\three{
    const NAME = '西门大官人';
    function php(){

    }
    class phpcn{

    }
}

# 五、访问命名空间

  • use 关键字引用命名空间
  • AS 解决类名过长、重名问题
namespace one;
const NAME = '灭绝师太的常量';
function php(){
    echo '灭绝师太的函数';
}
class phpcn{
    public function fun(){
        echo '灭绝师太的类';
    }
}

echo php();
echo '<hr>';
echo \two\php();
echo '<hr>';
echo \one\two\three\php();
echo '<hr>';
use \one\two\three as t;
echo t\php();
echo '<hr>';

namespace two;
const NAME = '西门大官人的常量';
function php(){
    echo '西门大官人的函数';
}
class phpcn{
    public function fun(){
        echo '西门大官人的类';
    }
}


namespace one\two\three;
const NAME = '欧阳的常量';
function php(){
    echo '欧阳的函数';
}
class phpcn{
    public function fun(){
        echo '欧阳的类';
    }
}

# 六、冲突

  • 新建目录文件:/one/one.php
<?php
    namespace one\one;
    const NAME = '灭绝师太的常量';
    function php(){
        echo '灭绝师太的函数';
    }
    class phpcn{
        public function fun(){
            echo '灭绝师太的类';
        }
    }
  • 新建目录文件:/two/one.php
<?php
    namespace two\one;
    const NAME = '西门大官人的常量';
    function php(){
        echo '西门大官人的函数';
    }
    class phpcn{
        public function fun(){
            echo '西门大官人的类';
        }
    }
  • 解决冲突
<?php
    require 'one\one.php';
    require 'two\one.php';
    use one\one as o;
    use two\one as t;

    $php = new t\phpcn();
    $php->fun();
    echo '<hr>';
    echo o\php();
Name:
<提交>