序言
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()函数去实现类的自动加载。