我们熟悉的命名空间个人认为是现代php特性中的No1,就算你不知道其他现代php特性,那么命名空间是唯一必须得知道的,不然还怎么愉快的和php玩耍呢?命名空间在php5.3.0中引入,是一个很重要的工具,其作用是按照一种虚拟的层次结构组织PHP代码,这种层次结构类似操作系统中文件系统的目录结构。
现代的PHP组件(我们熟悉的composer)和框架都放在各自全局唯一的厂商命名空间中,以免与其他厂商使用的常见类名冲突关键字:namespace查看一个案例:打开:https://packagist.org/ 这就是我们php使用的组件composer包网站,不熟悉也没关系!输入。
symfony/console 这是一个console组件,单独开发console程序非常好用,查看组件详情,进入到github的源代码中,也可以直接点击:https://github.com/symfony/console
打开:Command/Command.php查看12行代码:namespace Symfony\Component\Console\Command;namespace:声明命名空间的关键字Symfony:
在组件中我们认为这是一个厂商的名字,具有唯一性,在框架使用中,例如tp5.1 laravel中书写Controller或者Model或者自已定义的Service文件目录时,里面的类用App开头,其实那个是composer.json里面使用psr4自定义的根目录空间,后续文章会单独理解,哈哈哈哈
Component\Console\Command:子命名空间习惯用框架的朋友会又疑问?为什么子命名空间和目录结构不一样,请回到 https://github.com/symfony/console 打开composer.json 在52行代码:"psr-4": { "Symfony\\Component\\Console\\": ""... 这里表示根目录使用Symfony\\Component\\Console\\这个命名空间,后续文章会单独理解,哈哈哈哈
命名空间(或者子命名空间)的作用就是封装和组织相关的PHP类,就像在文件系统中把相关的文件放在同一个目录中一样PHP命名空间与操作系统的物理文件系统不同,这是一个虚拟概念,没必要和文件系统中的目录结构完全对应,虽然如此,但是大多数PHP组件为了兼容广泛使用的PSR-4自动加载标准,会把子命名空间放到文件系统的子目录中(。
上面有说到哟!)我们为何要使用命名空间?一句话总结:解决同类名在一个项目中冲突组件的出现也是基于伟大的命名空间,为后续的PSR-4自动类加载做好铺垫如果你开发的是小型个人项目,只有少量的依赖,类名冲突可能不是问题。
但是如果在团队中工作,卡覅有许多第三方依赖的大型项目,就要认真对待命名冲突问题,因为你无法控制项目依赖在全局命名空间中引入的类、接口、函数和常量这就是为什么一定要在你的代码中使用命名空间的原因如何声明命名空间?
关键字:namespace 厂商(唯一全局,后面开发composer包你也可以用你自己名字,哈哈哈)\子命名空间;例如:
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。