php命名空間

1.爲啥須要命名空間php

解決命名衝突問題。好比本身定義了一個類A,第三方也有一個類A,就能夠對本身在類設置一個命名空間,MYCLASS,這樣,訪問本身在類時候,就MYCLASS\A這樣訪問,就不會衝突。html

2 命名空間應用app

lib1 and lib2是須要導入的類庫ui

<?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:spa

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

相關文章
相關標籤/搜索