码迷,mamicode.com
首页 > Web开发 > 详细

php命名空间

时间:2016-07-04 22:08:25      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:

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命名空间

标签:

原文地址:http://www.cnblogs.com/wz0107/p/5641611.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!