PSR4自动加载

什么是psr

PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。
百度百科:https://baike.baidu.com/item/PSR/19915567?fr=aladdin

PSR描述了类名和文件路径自动加载。

1 class 指的是 class interface trait 以及其他类似结构体

2 一个合格的类名应该是下面格式

<NamespaceName>(<SubNamespaceNames>)*<ClassName>
必须有一个顶级命名空间

可以包括一级或多级子命名空间的名字

必须包括一个最终的类名

下划线在这里没有任何特殊含义

类名大小写敏感

3 例子

完整合格的限定性类名 命名空间前缀 基本路径 文件真实路径
\Acme\Log\Writer\File_Writer Acme\Log\Writer ./acme-log-writer/lib/
\Aura\Web\Response\Status Aura\Web /path/to/aura-web/src/
\Symfony\Core\Request Symfony\Core ./vendor/Symfony/Core/
\Zend\Acl Zend /usr/includes/Zend/

命名空间 对应的是文件 还是目录?

1.当成是目录吧
2.使用命名空间只是让类名有了前缀,不容易发生冲突,系统仍然不会进行自动导入。

命名空间的问题

php 命名空间与文件引入
问题描述:这两天试着自己写一些东西,也是为了复习一下忘了的PHP基础知识,但是写到命名空间的时候遇到了一点问题,在这记录一下:当我写好文件之后,添加了命名空间,结果一直提示命名空间下类不存在,一直以为是其他原因,查了老半天都没解决,到后来才忽然想起来,use 命名空间不等于加载(引入);
  总结:use只是使用了命名空间,但是要想调用类,必须要加载类文件,或者自动加载(reqquire或者include)。

一篇弄懂PHP命名空间及use的使用

https://zhuanlan.zhihu.com/p/80352112

注意:use不等于require_once或者include,use的前提是已经把文件包含进当前文件。

顺便提一句,在MVC模式中,类名和文件名是相同的,所以use的时候会让不了解的人以为use后面跟的是文件名,我之前就这么以为的。其实use的还是类名。

use的是类名,不是文件名

posted @ 2020-09-27 21:24  风意不止  阅读(437)  评论(0编辑  收藏  举报