• PHP namespace(命名空间) 和 use; 很多人搞不清楚命名空间和使用方法,书上介绍也不清楚看着头大


    为了解决在同一个文件引入多个文件时,类名重复报错问题。比如,test_1.php里有个test类,test_2.php文件里也有一个test类,如果一个文件同时引入了这两个文件时,在PHP 5.2版本以前就会报错,那么,大家的做法就是把相应重名类改为不重名类,方可使用,但是一旦项目非常大,文件非常多的时候,显然是这不利于管理的,于是引入了namespace这个概念,用来圈定相同名字的类属于不同的区域。

    示例一
    场景一:未使用namespace

    demo/test_1/test_1.php

    
    
    class test{
    
          public function test() {
    
                echo __METHOD__;
    
          }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    demo/test_2/test_2.php

    
    
    class test{
    
           public function test() {
    
                echo __METHOD__;
    
            }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    demo/demo.php

    
    
    include 'test_1.php';
    
    include 'test_2.php';
    
    ###报错:Cannot redeclare class test inD:\project\demo\test_2\test_2.phpon line2
    
    #对test_1.php 和test_2.php分别添加命名空间:
    
    namespace test_1;
    
    namespace test_2;
    
    #再访问demo.php就不会报错了,因为重名的test类已经分属于两个不同的区域了
    
    #那么,如何使用命名空间?在demo.php 中添加如下代码:
    
    $test_1 = new test_1\test();
    
    echo $test_1->test();
    
    echo '
    '
    ; $test_2 = new test_2\test(); echo $test_2->test();
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    在demo文件中想要使用带有命名空间的文件时,必须是 “命名空间\类” 这样去使用

    示例二
    我们在使用框架的时候,总会使用到namespace和Use这两个东西,我们先来看它们存在的意义
    namespace:是指我们当前类中,所在的位置。使用namespace关键字的话,我们就可以达到效果:项目变得大型后,不同的模块有着相同的类的名称时,不会报错

    (可以举个这个通俗例子来理解:

    带上指定命名空间(加namespace的类)代表某人的苹果(在他手里),

    顶级命名空间(不加namespace的类)代表苹果箱里的苹果(在箱子里)。

    现在要找某人的苹果,就将某人的命名空间带上,

    否则就会从箱子里找某人的苹果,结果会导致找不到。)

    use:是指我们要使用的类的位置(精确到具体类名)

    例如:当前要编辑的类名为aa.php,在这个类中我们想要调用bb/cc/dd/ee.php类,那么我们使用use应该这样做

    
    use bb\cc\dd\ee;
    class aa{
    	public static function index(){
    		ee::select();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如果我们不使用use的话,可以调用ee类吗?

    当然可以,我们应该这样做

    
    class aa{
    	public static function index(){
    		bb\cc\dd\ee::select();
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这样做的话,就会变得不太方便,因为如果在aa类中,如果有很多个方法都需要用到ee类呢?这样我们就要重复做很多次bb\cc\dd\ee::方法名()才可以

  • 相关阅读:
    使用IntelliJ Idea开发Spark Streaming流应用程序
    sizeof和strlen求取数组&指针之辨析
    【王道】操作系统OS第三章存储系统(三)
    QT之OpenGL 计算机图形学线性代数基本知识
    服务网关实践
    量体裁衣方得最优解:聊聊页面静态化架构和二级CDN建设
    【Android 从入门到出门】第二章:使用声明式UI创建屏幕并探索组合原则
    【LeetCode周赛2020.8.7】
    3D 碰撞检测
    3D视觉识别案例:3D无序棒料抓取,阀体圆环上下料,电机定子上料
  • 原文地址:https://blog.csdn.net/cdcdhj/article/details/126593099