PSR-0 规范
- 命名空间必须与绝对路径一致
- 类名首字母必须大写 (注意是类名,而不是文件名)
- 除入口文件外,其他的
.php
必须只有一个类
开发符合PSR-0规范的基础框架
- 全部使用命名空间
- 所有的PHP文件必须自动载入,不能有 include/require
- 单一入口
首先说明下类自动载入
__autoload 但是这个函数被废弃了,因为这个函数使用一次以上的话,会报函数命名冲突的错误
function __autoload($class)
{
require __DIR__.'/'.$class.'.php';
}
spl_autoload_register() php5.3之后官方提倡使用此函数取代 __autoload (spl_autoload_register — 注册给定的函数作为 __autoload 的实现)
这个函数载入的是一个函数,在函数中引入文件即可,而且不会引起冲突
还可以多次调用此函数
index.php
<?php
spl_autoload_register('auto');
\app\Controller\Index::test();
function auto($class)
{
require __DIR__ . '/' . str_replace('\\','/',$class) . '.php';
}
app/Controller/Index.php
<?php
namespace app\Controller;
class Index
{
public static function test()
{
echo 'index test';
}
}
注意
- 规范中可能是类的首字母必须大写,文件好像并没有规定大小写,但是我测试过类和文件名大小写其实都是可以的
- 但是命名空间必须与文件名一直,因为引入的时候可能是安好命名空间引入的,打印
auto($class)
的参数,得到的其实就是命名空间 - 所以需要使用
str_replace
函数转换\\
为/
- spl_autoload_register() 函数时可以多次调用的,而且不会引起命名冲突
- 很多讲解者喜欢把 spl_autoload_register() 函数的参数使用
autoload
,但其实随便一个函数都行,只是使用的功能要是本例中auto
函数的功能