序言
PSR-0 是 PHP 业界的一个代码规范,主要类容如下
- 命名空间必须与绝对路径一致
- 类名首字母必须大写
- 除了入口文件外,其他
.php
文件必须只有一个类
实现一个简易的符合 PSR-0 规范的 PHP 框架
首先项目的结构如下图所示:
以Home
目录下的index.php
文件为例子:
<?php
namespace App\Controller\Home;
class Index{
static function test(){
echo __METHOD__."\n";
}
}
复制代码
我们可以看到:
- 使用了和文件绝对路径一致的命名空间:
App\Controller\Home
- 类的首字母大写:
class Index
- 该文件下只有一个类
class Index
框架的功能
我们定义一个 Loader
类,其中包含类自动注册所需的函数
<?php
namespace Src;
class Loader{
static function autoload($class){
$file=BASEDIR.'/'.str_replace('\\','/',$class).'.php';
//var_dump($file);
require_once "$file";
}
}
复制代码
定义两个测试所需的类:
Src\Object.php
<?php
namespace Src;
class Object{
static function test(){
echo __METHOD__."\n";
}
}
复制代码
App\Controller\Home\Index.php
<?php
namespace App\Controller\Home;
class Index{
static function test(){
echo __METHOD__."\n";
}
}
复制代码
入口文件 Index.php
<?php
define('BASEDIR',__DIR__);
//包含 包含了注册函数的文件类
include BASEDIR.'/Src/Loader.php';
//注册函数
spl_autoload_register('\\Src\\Loader::autoload');
//测试类
Src\Object::test();
App\Controller\Home\Index::test();
复制代码
运行结果
可以看到我们并没有手动的去引入Src\Object
类和App\Controller\Home\Index
类,而是交给了spl_autoload_register()
函数去实现类的自动加载。