温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

php PSR规范中的PSR4和PSR0规范实例分析

发布时间:2022-03-18 16:24:25 来源:亿速云 阅读:586 作者:iii 栏目:大数据

这篇文章主要介绍“php PSR规范中的PSR4和PSR0规范实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php PSR规范中的PSR4和PSR0规范实例分析”文章能帮助大家解决问题。

PSR4的格式

\<命名空间>(\<子命名空间>)*\类名

具体的内容直接上文中提供的参考链接,这里总结重要的几点:

  • 顶级命名空间必须有一个

  • 子命名空间可以多个或没有

  • 类名必须有

  • 大小写敏感,下划线无实际意义(注意,下划线是主要的和PSR0的区别)

类名与文件载入的对应
  • 去掉最前面的命名空间的分隔符,前面的命名空间作为[命名空间前缀],必须与至少一个[文件基目录]对应

  • 子命名空间与[文件基目录]下的文件夹对应,命名空间分隔符号作为目录分隔符号

  • 末尾的类名,与最终目录下的对应的.php文件相同

  • autoload的实现不可出现异常,也就是要解决掉异常问题

估计各位看得一脸懵逼吧!!

其实很好理解,举例说明,我们先建立一个目录叫myvendor,里面放着常用的工具包,如图:

php PSR规范中的PSR4和PSR0规范实例分析

那么TestClass.php的命名空间应该是Test,而CaseClass的应该是CaseModel\CaseChild。统一从myvendor这个文件夹作为入口进入。也就是myvendor是一个超级[基目录],然后Test和CaseModel是对应命名空间的两个[文件基目录],剩下的子个名空间与目录对应。官网中还有其他的展示方式,但在这里我们用这种最标准的方式。

其实说白了,就是命名空间和目录对应上,写代码找文件就方便得很啦!!

上面说的是PSR4的规范,那么PSR0又是什么鬼?目前来说PSR0已经废弃了,它们两个大部分内容还是相近的,最大的区别在于PSR0中的_这个符号是有意义的,也就是/namespace/package/Class_Name这样的内容,会去提供/namespace/package/Class/Name.php文件,而PSR4中则忽略_这个符号的意义,还是去查找Class_Name.php这个文件。

TestClass.php代码

<?php

namespace Test;


class TestClass
{
   public function show()
   {
       echo "we are family!\n";
   }
}

CaseClass.php代码

<?php

namespace CaseModel\CaseChild;

class CaseClass
{
   public function show()
   {
       echo "Good!\n";
   }
}

接下来,在myvendor目录外面添加一个psr4.php文件,代码如下:

<?php

spl_autoload_register(function ($class) {
   $vendor = __DIR__ . '/myvendor';
   $file   = $vendor . '/' . str_replace('\\', '/', $class) . '.php';
   if (file_exists($file)) {
       require $file;
   }
});

use CaseModel\CaseChild\CaseClass;
use Test\TestClass;

$t = new TestClass();
$t->show();

$c = new CaseClass();
$c->show();

关于“php PSR规范中的PSR4和PSR0规范实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI