• php中命名空间的使用


    简单使用


    命名空间主要解决函数/类冲突的问题。由于PHP中中不允许函数重载,所以我们要使用的到命名空间的。先看一个简单的例子。

    <?php
        
        namespace A;
        public function test(){
            return "hello";
        }
    
        namespace B;
        public function test(){
            return 'world';
        }
    
        echo test();

    如果我们不加命名空间,则php就会报错。加了之后,上面的输出结果如下:

    这是因为在函数调用时候,会采用就近原则来使用命名空间,所以会调用空间B下的test()函数。如果需要使用A中的test,则需要采用下面的方式。

    echo A	est();

    子空间使用


     

    命名空间采用的是树形结构,根节点为空。如A est()表示访问跟根节点下的A空间下的Test方法。当然,还可以在某个空间下继续定义空间,我们称之为子空间。

    <?php
        
        namespace A;
        function test(){
            return "hello";
        }
    
        namespace B;
        function test(){
            return 'world';
        }
    
        namespace AC;
        function test(){
            return "!";
        }
    
        echo AC	est();

    在A空间下有定义了一个C空间,我们想要使用C空间下的test()方法,则test()前面加上空间的绝对路径即可。

    注意在定义空间时也应该使用绝对定位,比如想要在C下再定义一个子空间,那么应该是 namespace ACD ,而不是 namespace CD 

    空间引入


    在调用别的空间下的函数时,需要加上绝对路径。如果路径很长则书写代码不方便。为了简化操作,我们可以通过引入空间来调用函数。

    <?php
        
        namespace A;
        function test(){
            return "hello";
        }
    
        namespace ACDE;
        function test(){
            return "!";
        }
    
        namespace B;
        function test1(){
            return 'world';
        }
    
        function test2(){
            return '!!!';
        }
        
        use ACDE;
        echo E	est();

    在代码种定义了一个多级空间ACDE,如果不引入空间的话则需要这样来调用 echo ACDE est() ,当我们引入空间后调用就方便了许多。

    如果某个空间下定义了类,还可以直接将该类引入。

    <?php
        
        namespace A;
        function test(){
            return "hello";
        }
    
        /**
        *   
        */
        class Person{
            
            static $name = 'ff';
        }
    
        namespace ACDE;
        function test(){
            return "!";
        }
    
        namespace B;
        function test1(){
            return 'world';
        }
    
        function test2(){
            return '!!!';
        }
        
        use ACDE;
        echo E	est();
    
        use APerson;
        echo Person::$name;

    直接将Person类引入,然后访问其静态成员。

    公共空间


    如果PHP脚本文件中没有定义空间,那么其空间被认为是公共空间。

    • 公共空间引入自定义空间
    <?php
        require_once 'custom.php';
    
        function test(){
            return 'aa';
        }
    
       echo A	est();

     调用custom.php文件中A空间下的test()方法。

    • 自定义空间引入公共空间
    <?php
        namespace A;
        require_once 'test.php';
        function test(){
            return '!!!';
        }
    
        echo 	est();

     当前的空间是A空间,这里调用公共空间下的test()方法。

     注意:如果要使用namespace,则namspace必须是第一行代码。

        define定义的常量不受命名空间的限制

  • 相关阅读:
    《Scrum实战》第4次课【全职的Scrum Master】作业汇总
    回顾Scrum学习:《Scrum实战》第4次课【全职的Scrum Master】作业
    孙式无极桩站桩要领--林泰年
    [Android Tips] 29. 如何判断当前编译的是哪个 Flavor ?
    [Jenkins] 解决 Gradle 编译包含 SVG Drawable 出现异常
    [Android Tips] 28. 如何指定运行特定的 Android Instrumentation Test
    [Gradle] 给已存在的 task 添加依赖
    [Gradle] 针对不同的项目类型应用不同的 findbugs 配置
    [Android Tips] 27. 检查 APK 是否可调试
    [Gradle] 如何强制 Gradle 重新下载项目的依赖库
  • 原文地址:https://www.cnblogs.com/xidongyu/p/5602944.html
Copyright © 2020-2023  润新知