php命名空间

Posted Debugor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php命名空间相关的知识,希望对你有一定的参考价值。

1.为啥需要命名空间

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

2 命名空间应用

lib1 and lib2是需要导入的类库

<?php
// application library 1
namespace App\\lib1;

const MYCONST = \'App\\Lib1\\MYCONST\';

function MyFunction() {
    return __FUNCTION__;
}

class MyClass {
    static function WhoAmI() {
        return __METHOD__;
    }
}
?>
<?php
// application library 1
namespace App\\lib2;

const MYCONST = \'App\\Lib2\\MYCONST\';

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 App\\Lib1;

const MYCONST = \'App\\Lib1\\MYCONST\';

function MyFunction() {
    return __FUNCTION__;
}

class MyClass {
    static function WhoAmI() {
        return __METHOD__;
    }
}
    echo MYCONST.\'<br>\';
    echo MyFunction().\'<br>\';
    echo MyClass::WhoAmI();

    /*
        App\\Lib1\\MYCONST
        App\\Lib1\\MyFunction
        App\\Lib1\\MyClass::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 APP\\lib1\\MYCONST.\'<br>\';
    echo APP\\lib1\\MyFunction().\'<br>\';
    echo APP\\lib1\\MyClass::WhoAmI();


    /*
        App\\Lib1\\MYCONST
        App\\Lib1\\MyFunction
        App\\Lib1\\MyClass::WhoAmI

    */

    

    //使用use去调用对应元素
    use APP\\lib1;
    echo lib1\\MYCONST.\'<br>\';
    echo lib1\\MyFunction().\'<br>\';
    echo lib1\\MyClass::WhoAmI();


    /*
        App\\Lib1\\MYCONST
        App\\lib1\\MyFunction
        App\\lib1\\MyClass::WhoAmI
    */

    /*
        总结:
        1.没有使用命名空间时候,默认全局空间
        2.使用全称或者use空间+半称都可以找到命名空间下面在元素
        
    */    

?>
<?php
    //app4.php 
    //use 别名
    require "lib1.php";
    require "lib2.php";

    use APP\\lib1 as l1;
    use APP\\lib2 as l2;

    echo l1\\MYCONST;
    echo l2\\MYCONST;

    //App\\Lib1\\MYCONST
    //App\\Lib2\\MYCONST


    /*
        总结:
        使用use的别名功能
    */
?>

 

<?php
    //app5.php 
    //use 类
    require "lib1.php";

    use APP\\lib1\\MyClass;

    echo MyClass::WhoAmI();

    //App\\lib1\\MyClass::WhoAmI



    /*
        总结:
        使用use直接使用类
    */
?>

 

reference:

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

以上是关于php命名空间的主要内容,如果未能解决你的问题,请参考以下文章

现代PHP-命名空间

PHP命名空间

xml 中的 Android 谷歌地图片段。我得到“意外的命名空间前缀”

PHP命名空间面向对象以及构造函数

php命名空间

命名空间