您的位置 首页 php

我们身边的现代PHP(一)

我们熟悉的命名空间

个人认为是现代php特性中的No1,就算你不知道其他现代php特性,那么命名空间是唯一必须得知道的,不然还怎么愉快的和php玩耍呢?

命名空间在 php5.3.0 中引入,是一个很重要的工具,其作用是按照一种虚拟的层次结构组织PHP代码,这种层次结构类似操作系统中文件系统的目录结构。现代的PHP组件( 我们熟悉的composer )和框架都放在各自全局唯一的厂商命名空间中,以免与其他厂商使用的常见类名冲突。

关键字: namespace

查看一个案例:

打开: 这就是我们php使用的组件composer包网站,不熟悉也没关系!输入 symfony/console 这是一个console组件,单独开发console程序非常好用,查看组件详情,进入到github的源代码中,也可以直接点击:

打开:Command/Command.php

查看12行代码:namespace Symfony\ Component \Console\Command;

namespace: 声明命名空间的关键字

Symfony: 在组件中我们认为这是一个厂商的名字,具有唯一性,在框架使用中,例如tp5.1 laravel中书写Controller或者Model或者自已定义的Service文件目录时,里面的类用App开头,其实那个是composer.json里面使用psr4自定义的根目录空间,后续文章会单独理解,哈哈哈哈

Component\Console\Command: 子命名空间

习惯用框架的朋友会又疑问?为什么子命名空间和目录结构不一样,请回到 打开composer.json 在52行代码:”psr-4″: { “Symfony\\Component\\Console\\”: “”… 这里表示根目录使用Symfony\\Component\\Console\\这个命名空间,后续文章会单独理解,哈哈哈哈

命名空间(或者子命名空间)的作用就是封装和组织相关的PHP类,就像在文件系统中把相关的文件放在同一个目录中一样。

PHP命名空间与操作系统的物理文件系统不同,这是一个虚拟概念,没必要和文件系统中的目录结构完全对应,虽然如此,但是大多数PHP组件为了兼容广泛使用的PSR-4自动加载标准,会把子命名空间放到文件系统的子目录中( 上面有说到哟!

我们为何要使用命名空间?

一句话总结:解决同类名在一个项目中 冲突

组件的出现也是基于伟大的命名空间,为后续的PSR-4自动类加载做好铺垫。

如果你开发的是小型个人项目,只有少量的依赖,类名冲突可能不是问题。但是如果在团队中工作,卡覅有许多第三方依赖的大型项目,就要认真对待命名冲突问题,因为你无法控制项目依赖在全局命名空间中引入的类、接口、函数和常量。这就是为什么一定要在你的代码中使用命名空间的原因。

如何声明命名空间?

关键字:namespace 厂商(唯一全局,后面开发composer包你也可以用你自己名字,哈哈哈)\子命名空间;

例如:

<?php

namespace Origin\FirstDemo

大小写问题:无强制要求,建议驼峰命名,首字母大写,你要用小写也行哟!

厂商命名空间是最重要的命名空间,顶层命名空间用于识别品牌或者所属组织,必须具有全局唯一性,子命名空间没那么重要,不过有助于组织项目的代码

导入和别名

我们先来了解一个历史资源,现代phper可能没有用过,看看就好,在命名空间出现之前,PHP开发者使用Zend式的类名解决命名不冲突,因Zend框架而流行(感兴趣可以去学学,现在接触的项目只有古董级项目才会用Zend,哈哈哈)。

案例:Zend_Service_User_AddressService 类对应的文件 Zend/Service/User/AddressService.php

和我们现代的命名空间:Symfony\Component\Console\Command; 有点类似吧

导入: 告诉PHP使用哪个命名空间、类、接口、函数和常量,导入后不用输入全名了。

别名: 用一个简单的名称引用导入的类、接口、函数和常量。

直接来看例子:

写法一

<?php

$obj = new \Symfony\Component\Console\Command();

$obj->methodName();

写法二

<?php

use Symfony\Component\Console\Command;

$obj = new Command();

$obj->methodName();

写法三

<?php

use Symfony\Component\Console\Command as Com;

$obj = new Com();

$obj->methodName();

关键字:use as 使用非常简单吧! as 取别名通常用在类名一样,但是空间不一样,这个时候其中一个取别名,不然你需要使用写法一中,写完整的命名空间

很多人不知道的东西

PHP5.6开始可以导入函数和常量

<?php

use func Namespace\functionName;

functionName();

<?php

use constant Namespace\CONST_NAME;

echo CONST_NAME;

现代开发都是面向对象开发,所以函数用的比较少,常量应该见过吧!

后续会继续更新,感兴趣的小伙伴可以收藏下哟!

欢迎有问题或者项目开发有问题的小伙伴添加微信:wxmm686800,共同成长!

文章来源:智云一二三科技

文章标题:我们身边的现代PHP(一)

文章地址:https://www.zhihuclub.com/80465.shtml

关于作者: 智云科技

热门文章

网站地图