1.只有三种类型受命名空间的影响:类、函数、常量
2.使用namespace来声明(类似文件目录)
3.除非使用declare,否则namespace前不能有任何PHP和HTML代码(包括空白符)
4.同一命名空间可以定义在多个文件中,但分割开的命名空间中,上述三个类型也不能重名

<?php    
    namespace wo;
    const NAME=1;
    class Demo {
        static function one(){
            echo "11111<br>";
        }
    }
    function test(){
        echo "22222222<br>";
    }
    \wo\Demo::one();
    \wo\test();
    echo \wo\NAME;
?>

5.子命名空间(多层目录)

<?php    
    namespace wo\jia;
    const NAME=1;
    class Demo {
        static function one(){
            echo "11111<br>";
        }
    }
    function test(){
        echo "22222222<br>";
    }
    \wo\jia\Demo::one();
    \wo\jia\test();
    echo \wo\jia\NAME;
?>

6.同一文件中定义多个命名空间(不提倡),如果是连续声明,则以最后一个为准(覆盖)。非连续可以声明多个,建议用{}标明,用于多个PHP脚本合并到一个文件中。如下:

<?php    
    namespace wo\jia{
        const NAME=1;
        class Demo {
            static function one(){
                echo "11111<br>";
            }
        }
        function test(){
            echo "22222222<br>";
        }
        \wo\jia\Demo::one();
        \wo\jia\test();
        echo \wo\jia\NAME;
    }
    namespace ni\jia{
        const NAME=2;
    }
?>

7.将全局非命名空间代码和命名空间代码组合,只能使用{},全局代码用匿名的namespace{}包裹,不要在{}外部放任何代码,如下:

<?php    
    namespace wo\jia{
        const NAME=1;
        class Demo {
            static function one(){
                echo "11111<br>";
            }
        }
        function test(){
            echo "22222222<br>";
        }
        \wo\jia\Demo::one();
        \wo\jia\test();
        echo \wo\jia\NAME."<br>";
    }
    namespace ni\jia{
        const NAME=2;
    }
    namespace{
        var_dump(100);
    }
?>

8.命名空间下的(类/常量/函数)动态调用:必须使用限定性名称(不一定完全限定)

<?php    
    namespace wo\jia{
        const NAME=1;
        class Demo {
            static function one(){
                echo "11111<br>";
            }
        }
        function test(){
            echo "22222222<br>";
        }
        $s="wo\jia\Demo";//$s=__NAMESPACE__.'\Demo';
        $s::one();
    }
?>

9.魔术常量__NAMESPACE__:输出空间名称
10.namespaceXXX():可以代表当前空间下
11.命名空间的别名(使用方便):

<?php    
    namespace net\lampbrother\www;
    //use net\lampbrother\www as lamp;
    use net\lampbrother\www;//www
    function demo(){
        echo "11111<br>";
    }
    lamp\demo();
?>

12.命名空间导入
13.对于函数和常量来说,如果当前命名空间中不存在该函数或常量,PHP 会退而使用全局空间中的函数或常量。(类似JS中各种链)


1111
93 声望10 粉丝