技术饭
php命名空间基础入门
copylian
0 评论
11457 浏览
2017.01.04
什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。
在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题:
用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
PHP 命名空间提供了一种将相关的类、函数和常量组合到一起的途径。下面是一个说明 PHP 命名空间语法的示例:
1、命名空间只对:函数、类、常量(const定义的常量,define定义不起作用)起作用
2、实例:
<?php //命名空间1 namespace get; function getOne(){ return 1; } const GETONE = 1; class Myclass{} //命名空间2 namespace get2; function getOne(){ return 2; } const GETONE = 2; class Myclass{} //访问 ehco \get1\getOne(); echo \get1\getOne(); echo \get2\getOne(); echo \get2\GETONE; ?>
3、命名空间访问类型
<?php //命名空间1 namespace app\index\controller; use \think\Controller; class Index extends Controller{} function getMsg(){} const GETMSG = 1; //命名空间2 namespace app\admin\controller; use \think\Controller; class Index extends Controller{} function getMsg(){} const GETMSG = 2; //1、非限定名称访问方式,默认是当前的命名空间 getMsg(); $getmsg = new Index(); echo GETMSG; //2、限定名称访问方式,相当于相对路径 app\index\controller\getMsg(); new app\index\controller\Index(); echo app\index\controller\GETMSG; //3、完全限定名称访问方式,相当于绝对路径 \app\index\controller\getMsg(); new \app\index\controller\Index(); \echo app\index\controller\GETMSG; ?>
4、引入空间与引入空间类
<?php //命名空间1 namespace app\index\controller; class Index extends Controller{ public $obj = 1; static $sta = 1; } //命名空间2 namespace app\admin\controller; class Index extends Controller{ public $obj = 2; static $sta = 2; } //使用,引入空间 use app\index\controller; $index = new controller\Index(); echo $index->obj; echo controller\Index::$sta; //使用,引入空间类 use app\index\controller\Index; $index = new Index(); echo $index->obj; echo Index::$sta; ?>
5、公共命名空间:一般是我们没有定义命名空间的都作为公共命名空间
5.1)、1.php:当前命名空间加载公共命名空间
<?php namespace app\index\controller; class Index{} const MN = 'aa'; //加载公共命名空间 include('./2.php'); echo MN; //访问当前命名空间,一般会有个优先顺序,先是当前命名空间 echo \MN; //访问公共命名空间常量 ?>
5.2)、2.php:公共命名空间加载其他命名空间
<?php class Index{} const MN = 'aaaaaaa'; //加载命名空间 include('./1.php'); echo MN; //访问当前命名空间,一般会有个优先顺序,先是当前命名空间 echo \MN; //访问公共命名空间常量 ?>
感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!
文明上网理性发言!