以下为本篇文章全部内容:
今天给大家讲讲PHP的命名空间,在其他编程语言里面早就已经出现了,只是在一些编程语言里面不是叫命名空间而是包,PHP的命名空间跟java的包很类似,学过java的同学应该很容易就能理解。那么什么是命名空间,我这里借助一下百科的解释:命名空间是用来组织和重用代码的。如同名字一样的意思,NameSpace(名字空间),之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,对于库来说,这个问题尤其严重,如果两个人写的库文件中出现同名的变量或函数(不可避免),使用起来就有问题了,为了解决这个问题,引入了名字空间这个概念,通过使用 namespace xxx;你所使用的库函数或变量就是在该名字空间中定义的,这样一来就不会引起不必要的冲突了。
根据上面的解释我们可以知道命名空间是用来避免重名冲突的,PHP的命名空间在以前使用比较少,其主要一个原因就是PHP直到5.3才开始推出这个命名空间,在命名空间出来之前呢,我们一个PHP文件同时引入两个不同的PHP文件,但是那两个PHP文件分别有着相同的类名或者函数名,这个时候PHP就会给我们报错告诉我们函数名重复了,在我的视频里面会有讲到这部分,大家也可以看到报错的信息。我想PHP命名空间在国内得到广泛的使用应该归功于ThinkPHP吧,因为ThinkPHP3.2就开始采用了命名空间的形式,而国内使用框架的人大部分都是用ThinkPHP,也就是说你缩写的每一个控制器都需要声明和导入命名空间。那么命名空间怎么声明和使用呢,我们用代码来实际的操作一下,大家必须记住下面两个关键词。
声明:usenamespace
导入:use
>
高清视频下载地址:http://yunpan.cn/cdWpG9DMxu7Xq (提取码:15c4)
链接:http://pan.baidu.com/s/1c0nq88o 密码:uqmn
我们先定义一个php文件引入两个php文件函数名相同的案例
sunnyblog.php
<?php function sunny(){ echo "SunnyBlog"; }
sunnyweb.php
<?php function sunny(){ echo "SunnyWeb"; }
sunny.php
<?php require 'sunnyblog/sunnyblog.php'; require 'sunnyweb/sunnyweb.php';
大家执行sunny.php这个文件会发现爆出错误信息Fatal error: Cannot redeclare sunny() (previously declared in 这个错误的意思是sunny这个函数名重复了,这种情况的话我们遇到的情况特别多,特别是团队开发的时候不可能没有不重名的,今天我们就用命名空间来解决这个问题。
sunnyblog.php
<?php namespace sunnyblog;//声明命名空间 function sunny(){ echo "SunnyBlog"; }
sunnyweb.php
<?php namespace sunnyweb;//声明命名空间 function sunny(){ echo "SunnyWeb"; }
sunny.php
<?php require 'sunnyblog/sunnyblog.php'; require 'sunnyweb/sunnyweb.php'; sunnyblog\sunny();//通过不同命名空间调用函数 echo "<br>"; sunnyweb\sunny();//通过不同命名空间调用函数
上面是对于不同文件相同函数的案例,我们接下来讲讲不同文件夹里面的类该如何使用,假如我根目录里面有两个文件夹一个是sunnyblog一个是sunnyweb,里面分别有sunnyblog.php和sunnyweb.php两个文件,当我们不使用命名空间的时候同样的会跟上面的一样爆出错误Fatal error: Cannot redeclare class 说类名重复,我们这里就不演示了,直接上命名空间之后的代码。
sunnyblog/sunnyblog.php
<?php namespace sunnyblog;//声明命名空间 class SunnyBlog{ public function sunny(){ echo "SunnyWEB"; } }
sunnyweb/sunngweb.php
<?php namespace sunnyweb;//声明命名空间 class SunnyBlog{ public function sunny(){ echo "SunnyWEB"; } }
sunny.php
<?php require 'sunnyblog/sunnyblog.php'; require 'sunnyweb/sunnyweb.php'; $a = new sunnyblog\SunnyBlog(); $a->sunny(); echo "<br>"; $b = new sunnyweb\SunnyBlog(); $b->sunny();
通过上述代码我们就可以解决了类名冲突的问题,接下来我们讲讲命名空间的导入和别名,怎么做呢?我们修改一下sunny.php这个文件
sunny.php
<?php require 'sunnyblog/sunnyblog.php'; require 'sunnyweb/sunnyweb.php'; use sunnyweb as sunny;//导入命名空间并通过as起别名 $a = new sunnyblog\SunnyBlog(); $a->sunny(); echo "<br>"; $b = new sunny\SunnyBlog();//通过别名调用 $b->sunny();
通过别名和不是别名的结果是一样的。命名空间说复杂也不复杂说难也不难,看大家怎么去理解了。
谢谢大家对本博客的支持,本站专注原创技术文章,且看且珍惜博主的心得。请转载带上本文链接注明出处。
扫二维码快速加群:
如果大家有什么疑问可以加我QQ327388905进行解答,也可以加入交流群
总赞数量:18274
总踩数量:128087
文章数量:29