PHP中的命名空间相关概念浅析
1.PHP中的命名空间是什么?
什么是命名空间?“从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件foo.txt可以同时在目录/home/greg和/home/other中存在,但在同一个目录中不能存在两个foo.txt文件。另外,在目录/home/greg外访问foo.txt文件时,我们必须将目录名以及目录分隔符放在文件名之前得到/home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。”——命名空间概述
2.PHP命名空间该如何理解?
从本质上讲,命名空间就是一个容器,这个容器内我们可以放入类、函数和变量,他们在同一命名空间内可以无条件相互访问。在命名空间之外,就必须引用或者导入其他命名空间,才能调用它们包含的这些项。
命名空间跟shell中的文件目录的概念是一样一样的。在当前目录下可以直接用文件名访问所有文件,如果需要访问其他目录下的文件,就需要输入相对路径或绝对路径。
引用方式:
namespacefoo;
classFoo{
publicfunctionfoo()
{
return\top\namespace\bar\Bar::fuck();
}
}
导入方式:
namespacefoo;
usetop\namespace\bar\Bar;
classFoo{
publicfunctionfoo()
{ returnBar::fuck();
}
}
导入就相当于将目的类复制一份到当前命名空间中。
3.PHP命名空间有何实际应用?
命名空间的存在是为了解决下面两个问题:
1).用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
2).为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
4.一些tips
1.同一个空间下的类直接相互直接调用,属于一家。例如Laravel中的PageController类中可以直接写Page::all()这样的代码来调用Page这个model,因为他们俩都在顶级命名空间下。
2.若一个类存在于非顶级命名空间中,那么它只能在调用同样是当前命名空间下的其他类才不用“引用”或“导入”,它们属于一家。任何子命名空间都是另一个命名空间,另一个容器,没有除了容器之间关系之外的任何特殊关系。
3.Laravel采用classmap方式进行自动加载(autoload),PHP虽然有了命名空间这个高级特性,但是这只是逻辑关系,require文件还是要有的。这个类和文件的对应关系就存在/vendor/composer/autoload_classmap.php,每次composerdump-autoload都会重新编译、生成。
相关文章
- php spreadsheet导入
- php面试题-算法题总结篇
- PHP文件上传
- 开发环境配置Linux实现PHP开发环境(linux配置php)
- 版本实现Linux安装多个PHP版本的方法(linux安装多个php)
- PHP strlen():获取字符串长度
- 命令在PHP中执行Linux命令的方法(php执行linux)
- PHP使用Redis实现高性能缓存(php-redis)
- Linux环境下,如何进行PHP测试?(linux测试php环境)
- Android实现PHP连接MySQL进行数据交互(android通过php连接mysql)
- PHP文件快速导入MySQL数据库(php文件导入mysql)
- PHP MySQL 开发构建实现功能多样的网站(php mysql 类)
- 从PHP中解锁MSSQL的精彩!(php连mssql类)
- 解决PHP输出MSSQL数据中文乱码问题(php输出MSSQL乱码)
- PHP与MSSQL联动——更自由的数据空间(php mssql 空间)
- 在Linux环境下,使用PHP发送邮件(linux发送邮件php)
- 深入Linux:高效部署PHP项目(linux部署php项目)
- Linux下查看 PHP 进程信息(linux查看php进程)
- PHP的FTP学习(二)[转自奥索]
- PHP入门
- 在同一窗体中使用PHP来处理多个提交任务
- php网页游戏开发入门教程一(webgame+design)
- 让的PHP代码飞起来的40条小技巧(提升php效率)
- php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
- php中选择什么接口(mysql、mysqli)访问mysql
- php构造函数实例讲解
- PHP实现支持GET,POST,Multipart/form-data的HTTP请求类