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的还是类名。