php psr 4 自动载入,遵循PSR-4的自动加载,遵循PSR-4加载_PHP教程

遵循PSR-4的自动加载,遵循PSR-4加载

一、简介

首先这里要了解PSR,Proposing a Standards Recommendation(提出标准建议)的缩写,就是一种PHP开发规范,让我们研发出来的代码更合理、更好维护、可读性更高。PSR有下面几个标准:

PSR-0:自动加载

PSR-1:基本代码规范

PSR-2:代码样式

PSR-3:日志接口

PSR-4:规范自动加载的路径问题

这里看出PSR的下标也是从0开始的,和数组还有点像~。其实PSR-4和PSR-0是有点相似甚至冗余的,他们都说明的是自动加载的规范,只不过PSR-4中的规范更加简洁,在PSR-0中下划线"_"是有特殊含义的,在autoload处理的时候需要将下划线转换为目录分隔符,而在PSR-4中下划线是没有任何特殊含义的,所以在文件自动加载的时候显得更加简洁、调理更加清楚。

我对github上面的psr-4规范中的例子进行了大概的翻译(相信你们的英语水平一定比我好,肯定可以看懂^_^),然后以这个自动加载类库做了一个小小的例子,例子文件多、长,放在这里不太合适,所以我在博客中就大概介绍下这个例子,想要详细了解的可以去我的github主页去看这个例子。

二、 自动加载类库介绍

首先看下自动加载类的大概内容:

classAutoload

{//注册自动加载函数到spl autoload栈中.

public functionregister();//添加一个目录到一个命名空间前缀中

public function addNamespace($prefix, $base_dir, $prepend=false);//自动加载函数,会在$this->register中用到

public function loadClass($class);//寻找映射的文件

public function loadMappedFile($prefix, $relative_class);//查看一个文件是否在文件系统中存在

public function requireFile($file);

}

自动加载类库函数中就这几个函数,其中register()、addNamespace()、loadMappedFile()、requireFile()函数都比较简单,一看就懂,唯一一个可能需要解释下的函数就是loadClass函数,先看下loadClass()函数的代码:

1 public function loadClass($class)2 {3 //当前的命名空间前缀

4 $prefix = $class;5

6 //通过命名空间去查找对应的文件

7 while (false !== $pos = strrpos($prefix, '\\')) {8

9 //可能存在的命名空间前缀

10 $prefix = substr($class, 0, $pos + 1);11

12 //剩余部分是可能存在的类

13 $relative_class = substr($class, $pos + 1);14

15 //试图加载prefix前缀和relitive class对应的文件

16 $mapped_file = $this->loadMappedFile($prefix, $relative_class);17 if ($mapped_file) {18 return $mapped_file;19 }20

21 //移动命名空间和relative class分割位置到下一个位置

22 $prefix = rtrim($prefix, '\\');23 }24

25 //未找到试图加载的文件

26 return false;27 }

其实有疑惑的地方可能也只有一个,那就是为什么这里要循环着去试图查找文件,在while循环中,会慢慢的缩短命名空间前缀的名称去需找合适的命名空间前缀,为什么要这么做呢?

循环查找文件是为了在命名空间中包含更多的内容,不用每次在父命名空间中新建一个文件夹的时候都去添加一个新的命名空间前缀,就像下面这个图中描述的那样:

PHPjiqiao-154947.html三、 例子

说道这里你可能已经对自动加载的内容比较了解了,这个时候趁热打铁看看我准备的小例子,这里只是介绍下小例子的目录结构,由于比较简单,详细的内容就不再这里列了,感兴趣的通许可以去我的github主页看看这个例子

--core

-Autoload.php

--vendor

--test1

-hello.php

--test2

-world.php

-App.php

本文版权归作者(luluyrt@163.com)和博客园共有,未经作者本人同意禁止任何形式的转载,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。

http://www.bkjia.com/PHPjc/936671.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/936671.htmlTechArticle遵循PSR-4的自动加载,遵循PSR-4加载 一、简介 首先这里要了解PSR,Proposing a Standards Recommendation(提出标准建议)的缩写,就是一种PHP开发规...

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值