• 技术文章 >后端开发 >PHP问题

    php命名空间use关键字怎么用

    青灯夜游青灯夜游2021-10-08 09:21:10原创173

    在php中,use关键字可以用来导入命名空间,语法“use namespace;”;也可用来导入函数和常量,并为它们设置别名,语法“use 命名空间 as 别名;”。

    本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑

    什么是命名空间?

    从广义上来说,命名空间是一种封装事物的方法,在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。

    命名空间的定义

    PHP 中命名空间(namespace)是在 PHP5.3 中加入的,如果你了解过 C++ 的话,那命名空间就不算什么新事物了。不过命名空间在 PHP 当中还是相当重要的。

    PHP 命名空间可以解决以下两类问题:

    定义命名空间(使用关键字 namespace)

    虽然任意合法的 PHP 代码都可以包含在命名空间中,但只有类(包括抽象类和 traits)、接口、函数和常量等类型的代码受命名空间的影响。

    命名空间的定义需要通过关键字 namespace 来声明,语法格式如下:

    namespace 命名空间名;

    【示例】下面我们来演示一下如何定义了命名空间:

    <?php
        namespace MyProject;    // 定义名为 MyProject 的命名空间。
        const CONNECT_OK = 1;
        class Myclass {
            /* ... */
        }
        function Myfunc() {
            /* ... */
        }
    ?>

    在声明命名空间之前除了用于定义源文件编码方式的 declare 语句外,所有非 PHP 代码(包括空白符)都不能出现在命名空间声明之前。

    使用命名空间:别名/导入

    PHP 允许通过别名引用或导入的方式来使用外部的命名空间,这是命名空间的一个重要特征。这有点类似于在类 unix 文件系统中可以创建对其它的文件或目录的符号连接。

    使用 use 关键字可以实现命名空间的导入,从 PHP5.6 开始允许导入函数和常量,并为它们设置别名。语法格式如下:

    use namespace;

    在 PHP 中,别名是通过操作符 use 与 as 来实现的,语法格式如下:

    use 命名空间 as 别名;

    【示例】使用 use 操作符导入和使用别名。

    <?php
        namespace foo;
        use My\Full\Classname as Another;
        // 下面的例子与 use My\Full\NSname as NSname 相同
        use My\Full\NSname;
        // 导入一个全局类
        use ArrayObject;
        // 导入一个函数
        use function My\Full\functionName;
        // 导入一个函数并定义别名
        use function My\Full\functionName as func;
        // 导入一个常量
        use const My\Full\CONSTANT;
        $obj = new namespace\Another;   // 实例化 foo\Another 对象
        $obj = new Another;             // 实例化 My\Full\Classname 对象
        NSname\subns\func();            // 调用 My\Full\NSname\subns\func 函数
        $a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象
                                        // 如果不使用 "use \ArrayObject" ,则实例化一个 foo\ArrayObject 对象
        func();                         // 调用 My\Full\functionName 函数
        echo CONSTANT;                  // 打印 My\Full\CONSTANT 常量
    ?>

    注意:对命名空间中的名称(包含命名空间分隔符的完全限定名称,如 Foo\Bar ,以及相对的不包含命名空间分隔符的全局名称,如 FooBar)来说,前导的反斜杠是不必要的也是不推荐的,因为导入的名称必须是完全限定的,不会根据当前的命名空间作相对解析。

    为了简化操作,PHP 还支持在一行中导入多个命名空间,中间使用,隔开,示例代码如下:

    <?php
        use My\Full\Classname as Another, My\Full\NSname;
        $obj = new Another;     // 实例化 My\Full\Classname 对象
        NSname\subns\func();    // 调用 My\Full\NSname\subns\func 函数
    ?>

    导入操作是编译执行的,但动态的类名称、函数名称或常量名称则不是。

    <?php
        use My\Full\Classname as Another, My\Full\NSname;
        $obj = new Another; // 实例化一个 My\Full\Classname 对象
        $a = 'Another';
        $obj = new $a;      // 实际化一个 Another 对象
    ?>

    另外,导入操作只影响非限定名称和限定名称。完全限定名称由于是确定的,故不受导入的影响。

    推荐学习:《PHP视频教程

    以上就是php命名空间use关键字怎么用的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    上一篇:php怎么检查一个变量是否被设置 下一篇:php怎么将boolean转为字符串
    大前端线上培训班

    相关文章推荐

    • php实现随机的函数有哪些• php怎么将二进制转hex字符串• php怎么将二维数组合并不改变键值• php中如果删除cookie

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网