zoukankan      html  css  js  c++  java
  • PHP 命名空间

    从PHP5.3.0开始引入命名空间的概念,那么命名空间是什么、为什么要使用命名空间、怎么使用命名空间呢?下面就给大家简单的讲解一下,相信读完这篇文章大家能对命名空间有比较清楚的认识。

    一、命名空间是什么?

    命名空间是现代PHP特性之一,从PHP5.3.0开始引入,其作用是将PHP代码按照一种虚拟的层次结构进行组织,这种结构类似于操作系统中文件系统的目录结构。下面看一个例子


    第三行:namespace AppModel; 是PHP命名空间的声明语句,命名空间声明时要放在<?php 后的第一行。这样写之后 User 就被定位到命名空间 AppModel 中。

    虽然命名空间类似于操作系统的物理文件系统,但有本质的不同。命名空间是一种虚拟的概念,没必要和文件系统中的目录结构完全相同。例如 User 在命名空间 AppModel 中, 但真实的文件目录却是 appUser.php 并没有 model 目录。 不过为了兼容PSR-4自动加载标准,一般都会把命名空间放到对应的文件系统的目录中。可以说命名空间的为现代PHP生态系统和基于组件的新型架构的实现奠定了坚实的基础。

    二、为什么要使用命名空间

    在通常的PHP开发中,除了使用自己的代码以外,往往会使用很多其他的PHP组件。这些组件代码可能会使用相同的类名、接口名、函数或者常量名等,如果不使用命名空间就会导致命名冲突,使PHP执行出错。而将代码放到各自唯一的命名空间中,我们的代码就可以和其他开发者使用相同的类名、接口名、函数或者常量名等,这在团队合作中相当重要。

    在引入第三方组件依赖时,命名空间往往说明了开发此组件的厂商或组织。例如

    在laravel框架中 TokenGuard 就位于厂商命名空间 Illuminate 中。

    三、怎么使用命名空间

    1、声明命名空间

    声明命名空间:在<?php 后的第一行声明,声明语句以 namespace 开头,随后是一个空格,然后是命名空间的名称,最后以 ;结尾。

    namespace Wilin;

    通常命名空间的开头用于设置顶层厂商名,这个例子中设置厂商名为 Wilin 。在这个命名空间声明语句后声明的所有PHP类、接口、函数和常量等都在 Wilin 命名空间中。如果在该命名空间下想要组织代码,可以使用子命名空间,只要使用  把命名空间和子命名空间分开就好了。例如:

    namespace Wilin/Model;

    这个命名空间中的类、接口、函数和常量等都在 WilinModel 命名空间中。

    厂商命名空间是最顶层的命名空间,也是最重要的命名空间,用于识别品牌或组织,必须具有全局唯一性。子命名空间相对而言没那么重要,但是可以用于组织项目的代码。

    2、全局命名空间

    如果在当前的命名空间中引用的类、接口、函数和常量没有指定命名空间,PHP则会认为它处于全局命名空间中。在命名空间中引用全局的代码时需要在类、接口、函数或常量前加 符号。例如原生的Exception类:

    3、三种名称术语

    • 非限定名称,或不包含前缀的类名称:如果当前命名空间是 WilinModel ,对于 $user = new User(); 。User 将被解析为 WilinModelUser ,如果当前命名是全局命名空间,则会被解析为 User 
    • 限定名称,或包含前缀的名称:如果当前命名空间是 Wilin ,对于 $user = new ModelUser(); 。User 将被解析为 WilinModelUser ,如果当前命名是全局命名空间,则会被解析为 ModelUser
    • 完全限定名称,或包含了全局前缀操作符的名称:对于 $user = new WilinModelUser(); 。在这种情况下,无论当前命名空间是什么 User 都将被解析为 WilinModelUser

    下面给出具体例子:

    4、导入&别名

    上述 一、 中的 User 的全名是 AppModelUser ,如果我们想在其他地方使用这个类就要把全名写出来,而导入可以解决这个问题。

    导入是指使用 use 关键字告诉PHP我们想使用哪个命名空间、类、接口、函数和常量,导入以后就不用再写全名了。例如:

    如果这样类名还是长或者想给该类另起一个名字,可以使用 as 来创建别名。将上图中第12行和17行分别改成下面这样既可。

    use AppModelUser as U;
    
    $user = new U();
    

    如果想要在PHP文件中导入多个类、接口、函数或常量,需要在PHP文件的顶部使用多个use语句,PHP支持用简短的语法把多个use语句写成一行。例如:

    <?php
    use AppModelAdmin;
    use AppModelUser;

    写成

    <?php
    use AppModelAdmin,AppModelUser;

    不过这样可读性差,还是一行写一个use语句比较好。

  • 相关阅读:
    gdb简易教程
    使用WoeUSB在Linux上制作Win10启动盘
    How to fix git: new blank line at EOF
    使用CSS3动画属性实现各种旋转跳跃
    jQuery事件
    挖矿程序minerd入侵分析和解决办法
    css3的伪(伪类和伪元素)大合集
    HTML 5 <blockquote><p>的分工与合作
    HTML<figure> <figcaption> 标签定义图文并茂
    监听 返回按钮事件
  • 原文地址:https://www.cnblogs.com/weiyalin/p/10385435.html
Copyright © 2011-2022 走看看