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/

posted @ 2016-07-04 20:26  Debugor  阅读(302)  评论(0编辑  收藏  举报