「php化整为零系列」五、命名空间

源码地址:https://github.com/wilfordw/phpTutorial

该系列我只写我的理解,非官方解释,如不够专业请见谅

命名空间存在主要是为了解决同名类同名方法在同一个项目中的冲突问题,虽然用起来比较繁琐但还是不得不用,为了代码整齐易于管理。标准php建议我们命名空间命名与目录一致,不过这里我为了做测试实例就放统一目录

<?php

//test1.php
// 命名空间的分隔符是反斜杠,该声明语句必须在文件第一行。
// 命名空间中可以包含任意代码,但只有 **类, 函数, 常量** 受命名空间影响。
namespace NameA\Test;

// 该类的完整限定名是 \NameA\Test\A , 其中第一个反斜杠表示全局命名空间。
class A{
    public function show(){
        echo '\NameA\Test\A';
    }
}

// 你还可以在文件中定义第二个命名空间,接下来的代码将都位于 \NameB\Test .
namespace NameB\Test;

class B{
    public function show(){
        echo '\NameB\Test\B';
    }
}
<?php

//test2.php
// 你还可以用花括号定义命名空间
namespace NameC\Test{

    require_once('test1.php');
     // 导入来自其他命名空间的名称,并重命名,
    // 注意只能导入类,不能用于函数和常量
    use \NameA\Test\A as ClassA;

    class C{
    
        public function show(){
            // 实例化来自子命名空间的对象:
            $b = new \NameB\Test\B;
            $b->show();
            $a = new ClassA;
            $a->show();
        }
    }

}
<?php
//test3.php
    require_once('test2.php');

    use \NameC\Test\C as ClassC;

    $c = new ClassC;
    $c->show();
    //输出 \NameB\Test\B\NameA\Test\A

如上例子 展示了同文件中多命名空间方括号包裹命名空间use命名空间与别名定义
值得注意的时候定义命名空间的时候使用NameA\Test,但引用的时候需要\NameA\Test,要不在NamaB\Test命名空间中使用NameA\Test 引用的其实是NamaB\Test\NameA\Test!

优化

php5.6以后对命名空间有一定的优化可以直接通过命名空间引用常量和函数

<?php
namespace Name\Space {
    const FOO = 42;
    function f() { echo __FUNCTION__."\n"; }
}

namespace {
    //支持对常量的引用
    use const Name\Space\FOO;
    //支持对函数的引用
    use function Name\Space\f;

    echo FOO."\n";//42
    f();//Name\Space\f
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,969评论 19 139
  • 提出问题 解决问题--命名空间的使用 PHP的命名空间(namespace)是php5.3之后才有的。这个概念在C...
    洞房花猪阅读 2,863评论 0 3
  • 1.命名空间 命名空间是什么? 1).命名空间在PHP 5.3中被引入,类似于文件夹的功能。例如Symfony框架...
    萧潇在jianshu阅读 349评论 0 4
  • 我一直觉得饱餐和被爱是一个人活在世界上最基本但是确实最美好的事情因为,饱餐是解决一个人的温饱问题,而被爱是为了满足...
    鹿暮小姐i阅读 6,551评论 1 6
  • 001 白衣少年 雨水滴滴答答的从缝隙钻进来,风也像妖魔似的叫唤着,教室里歪歪斜斜坐满了学生,等待着最后一声铃响冲...
    纳尼是我阅读 347评论 0 0