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

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

示例一
场景一:未使用namespace

demo/test_1/test_1.php

<?php

class test{

      public function test() {

            echo __METHOD__;

      }

}

demo/test_2/test_2.php

<?php

class test{

       public function test() {

            echo __METHOD__;

        }

}

demo/demo.php

<?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 '<br>';

$test_2 = new test_2\test();

echo $test_2->test();

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

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

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

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

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

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

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

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

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

<?php
use bb\cc\dd\ee;
class aa{
	public static function index(){
		ee::select();
	}
}

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

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

<?php
class aa{
	public static function index(){
		bb\cc\dd\ee::select();
	}
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值