类库扩展extend
StartMVC具备自动载入的特性,只要遵循一定的规则,类库文件可以按需加载。
自动载入的基本规则就是将类或类库放入extend目录中,要求类名和文件名相同,并且首字母大写,命名空间与目录路径相同。
namespace extend
class ClassA {
//code
}
//extend/ClassA.php
namespace extend\foo;
class ClassB {
//code
}
//extend/foo/ClassB.php
只要遵循这个规则,你可以创建任何类库,并实现自动载入。
Composer
StartMVC完全支持Composer,通过修改composer.json文件或Composer命令来管理依赖项并实现自动载入。
自定义函数function
自定义函数分两级:全局函数放在 app/function.php,模块函数放在 app/{模块}/function.php。框架不扫描目录,只加载这两个固定文件,因此加载顺序是确定的。
全局函数在框架引导阶段加载,CLI 与 HTTP 行为一致;模块函数只在进入该模块时加载,访问其他模块不会触发。
// app/function.php —— 全局,所有请求可用
if (!function_exists('format_price')) {
function format_price($cents)
{
return '¥' . number_format($cents / 100, 2);
}
}
// app/admin/function.php —— 只在访问 admin 模块时加载
if (!function_exists('admin_can')) {
function admin_can($action)
{
return \app\admin\service\Auth::check($action);
}
}
函数没有命名空间,重复定义是致命错误且无法捕获,所以每个函数都用 function_exists 包裹。函数数量多、或者需要共享状态时,应封装成类放进 extend 目录,按需加载。