使用框架习惯了,好多基础的东西都忘记了,今天遇到这个报错竟然还排查了半天。
1.先说解决方法
文件不存在,检查是否使用了自动加载,可能是composer的autoload配置错误。如果没有使用composer,确认自己是否require_once把文件包含进来。如果已经包含了,检查命名空间和类名大小写是否正确。命名空间前不能有任何输出。
2.命名空间和文件路径都对,为什么还是not found
因为我们还要使用require_once把要使用的类包含进来。
3.使用了use为什么还是not found
use 是逻辑引用,require是物理引用。必须把类包含进来才能使用。
4.2和3都对,为什么还是not found
检查下大小写,单词拼写
5.谈谈自动加载
现在用框架写项目一般很难看到第一行的require_once了,因为php5之后就有了自动加载机制,而框架带的composer文件,都已经帮我们把autoload配置好了,我们无需再关注类的物理位置,直接使用即可。
6 autoload配置文件类后的2个反斜杠不写会怎么样
A non-empty PSR-4 prefix must end with a namespace separator.
另外注意PSR-4和PSR-0的配置里,"Foo\"结尾的命名空间分隔符必须加上并且进行转义,以防出现"Foo"匹配到了"FooBar"这样的意外发生。
7 附一个无关的冷知识
windows 下php.ini的 extension配置两种形式
一种是省略php_前缀和.dll后缀
一种是全称
比如mongo和php_mongo.dll都可以,如果只写php_mongo就会报错
网友评论