• php命名空间


    1.为啥需要命名空间

    解决命名冲突问题。比如自己定义了一个类A,第三方也有一个类A,就可以对自己在类设置一个命名空间,MYCLASS,这样,访问自己在类时候,就MYCLASSA这样访问,就不会冲突。

    2 命名空间应用

    lib1 and lib2是需要导入的类库

    <?php
    // application library 1
    namespace Applib1;
    
    const MYCONST = 'AppLib1MYCONST';
    
    function MyFunction() {
        return __FUNCTION__;
    }
    
    class MyClass {
        static function WhoAmI() {
            return __METHOD__;
        }
    }
    ?>
    <?php
    // application library 1
    namespace Applib2;
    
    const MYCONST = 'AppLib2MYCONST';
    
    function MyFunction() {
        return __FUNCTION__;
    }
    
    class MyClass {
        static function WhoAmI() {
            return __METHOD__;
        }
    }
    ?>
    <?php
        //app1.php
        //一个全局空间
        const MYCONST = 'MYCONST';
    
        function MyFunction() {
            return __FUNCTION__;
        }
    
        class MyClass {
            static function WhoAmI() {
                return __METHOD__;
            }
        }
    
        echo MYCONST.'<br>';
        echo MyFunction().'<br>';
        echo MyClass::WhoAmI();
    
        /*
            MYCONST
            MyFunction
            MyClass::WhoAmI
        */
    
        //总结:在没有别的命名空间下,命名空间是全局
    ?>
    <?php
    //app2.php
    //一个命名空间
    namespace AppLib1;
    
    const MYCONST = 'AppLib1MYCONST';
    
    function MyFunction() {
        return __FUNCTION__;
    }
    
    class MyClass {
        static function WhoAmI() {
            return __METHOD__;
        }
    }
        echo MYCONST.'<br>';
        echo MyFunction().'<br>';
        echo MyClass::WhoAmI();
    
        /*
            AppLib1MYCONST
            AppLib1MyFunction
            AppLib1MyClass::WhoAmI
    
        */
    
    /*
    总结:
        在最开始定义命名空间之后,文件就只有一个命名空间,所有常量,类都属于这个空间
    */
    
    ?>
    <?php
        //app3.php
        //一个全局+一个命名
        require "lib1.php";
    
        const MYCONST = 'MYCONST';
    
        function MyFunction() {
            return __FUNCTION__;
        }
    
        class MyClass {
            static function WhoAmI() {
                return __METHOD__;
            }
        }
        
        //1全局空间
    
        echo MYCONST.'<br>';
        echo MyFunction().'<br>';
        echo MyClass::WhoAmI();
    
        /*
            MYCONST
            MyFunction
            MyClass::WhoAmI
        */
    
    
        //2手动设置全称命名空间来调用对应元素
        echo APPlib1MYCONST.'<br>';
        echo APPlib1MyFunction().'<br>';
        echo APPlib1MyClass::WhoAmI();
    
    
        /*
            AppLib1MYCONST
            AppLib1MyFunction
            AppLib1MyClass::WhoAmI
    
        */
    
        
    
        //使用use去调用对应元素
        use APPlib1;
        echo lib1MYCONST.'<br>';
        echo lib1MyFunction().'<br>';
        echo lib1MyClass::WhoAmI();
    
    
        /*
            AppLib1MYCONST
            Applib1MyFunction
            Applib1MyClass::WhoAmI
        */
    
        /*
            总结:
            1.没有使用命名空间时候,默认全局空间
            2.使用全称或者use空间+半称都可以找到命名空间下面在元素
            
        */    
    
    ?>
    <?php
        //app4.php 
        //use 别名
        require "lib1.php";
        require "lib2.php";
    
        use APPlib1 as l1;
        use APPlib2 as l2;
    
        echo l1MYCONST;
        echo l2MYCONST;
    
        //AppLib1MYCONST
        //AppLib2MYCONST
    
    
        /*
            总结:
            使用use的别名功能
        */
    ?>
    <?php
        //app5.php 
        //use 类
        require "lib1.php";
    
        use APPlib1MyClass;
    
        echo MyClass::WhoAmI();
    
        //Applib1MyClass::WhoAmI
    
    
    
        /*
            总结:
            使用use直接使用类
        */
    ?>

    reference:

    http://www.cnblogs.com/kuyuecs/p/3556421.html
    https://www.sitepoint.com/php-namespaces-import-alias-resolution/

  • 相关阅读:
    Ubuntu 16.04安装双显卡驱动方法收集
    Log4j的日志级别分析(转)
    Linux下使用Curl调用Java的WebService接口
    OSGI是什么
    Netflix是什么,与Spring Cloud有什么关系
    Ubuntu 16.04安装SQLite Browser操作SQLite数据库
    Eclipse关联JDK源码
    Markdown中插入图片技巧收集
    Mac OS X中Launchpad的图标添加删除方法(添加方法别试了,和Linux很大区别)
    Java反编译工具-JD-GUI
  • 原文地址:https://www.cnblogs.com/wz0107/p/5641611.html
Copyright © 2020-2023  润新知