命名空间中的类和方法

原创2018-11-21 16:03:17105
摘要:理解:命名空间相当于一个国家,类相当于省份,方法相当于市区,但省份之间不可重名,一个省份下的市区不可重名。每个空间下的省份和市区可以和其他空间下的省份和市区重名。知识点:声明命名空间:namespace 空间名;获取当前空间名称:__NAMESPACE__引用当前空间:namespace一个文件中可以命名多个不重名空间,使用:namespace 空间名称{  }全局空间名称为空:name

理解:命名空间相当于一个国家,类相当于省份,方法相当于市区,但省份之间不可重名,一个省份下的市区不可重名。每个空间下的省份和市区可以和其他空间下的省份和市区重名。

知识点:

声明命名空间:namespace 空间名;

获取当前空间名称:__NAMESPACE__

引用当前空间:namespace


一个文件中可以命名多个不重名空间,使用:namespace 空间名称{  }

全局空间名称为空:namespace{  }

全局空间用  \ 根

访问其他空间中的成员,一定要从全局空间开始  \space\

全局空间直接引用同文件空间方法、静态方法、常量:

 * namespace1\class\function()

 * namespace1\class::function

 * namespace1\class::CONSTANT

导入有空间名称的函数库:use function 空间名称\方法;

起别名:use function 空间\方法名称 as xxx;

在空间中可以定义和系统函数同名的函数,使用时优先在当前空间中查找,如果没有找到,就会自动到全局的空间中进行查找。如果想使用系统函数,则在系统函数前加'\',系统函数属于全局:\var_dump()

案例
namespace spaceA{
    const ONE = 'ONE';
    function getSpace(){
        return __NAMESPACE__;
    }
    function getMethod(){
        return __METHOD__;
    }

    class ClassA{
        public static function getClass(){
            return __CLASS__;
        }
    }
}
namespace spaceB{

    const ONE = 'TWO';
    function getSpace(){
        return __NAMESPACE__;
    }
    function getMethod(){
        return __METHOD__;
    }
}
namespace{
    echo '全局直接调用: '.spaceA\getMethod().' 方法和 '.spaceB\getMethod().' 方法<br>';
    echo '全局直接调用常量: '.spaceA\ONE.' 和 '.spaceB\ONE.' ,两个空间下同名常量 互不影响<br>';
}

namespace spaceC{
    use spaceA\ClassA;
    use function spaceA\getSpace as agetSpace;
    use function spaceA\getMethod as agetMethod;
    echo __NAMESPACE__.' 调用'.agetSpace().'中的类: '.ClassA::getClass().'<br>';
    echo __NAMESPACE__.' 调用'.agetSpace().'中的方法: '.agetMethod();
}

gg

发布手记

热门词条