类自动载入、开发一个PSR-0的基础框架
来源:互联网 发布:淘宝客怎么算恶意下单 编辑:程序博客网 时间:2024/06/03 05:13
类自动载入
最早的php项目都是通过手动include
或者require
来载入依赖的文件的,当项目越来越大,依赖越来越多,这样开发就很不方便了。
<?phprequire 'Test1.php';require 'Test2.php';Test1::test();Test2::test();
PHP5.2就提供了类的自动载入功能。
<?phpTest1::test();Test2::test();function __autoload($className){ require __DIR__.'/'.$className.'.php';}
最早的时候我通过__autoload
这个魔术函数,从上面代码,我们可以看出,我们没有手动引入Test1
和Test2
,那是因为__autoload
函数帮我完成了这一步。
但是__autoload
之后被废弃了。主要原因是我们一个php工程可能依赖于多个框架,如果我们每一个框架都有这个函数,就会报一个“函数重复定义”的错误。
在PHP5.3之后,官方提供了另一个函数:spl_autoload_register
<?phpspl_autoload_register('autoload1');spl_autoload_register('autoload2');Test1::test();Test2::test();function autoload1($className){ require __DIR__.'/'.$className.'.php';}function autoload2($className){ require __DIR__.'/'.$className.'.php';}
开发一个PSR-0的基础框架
PSR-0规范:
1、命令空间必须和绝对路径一致
2、类名的首字母必须大写
3、除了入口文件外,其他.php
必须只有一个类
开发符合RSR-0规范的基础框架:
1、全部使用命名空间
2、所有PHP文件必须自动载入,不能有include或require
3、单一入口
如果我们想在入口文件index.php中调用2个命令空间下的类方法
IMooc\Object::test();App\Controller\Home\Index::test();
这个时候,怎么自动加载我们需要的类呢?Loader.php
就上场了。
Loader.php:
<?phpnamespace IMooc;class Loader{ static function autoload($className) { // 映射成文件的绝对路径 $file = BASEDIR.'/'.str_replace('\\','/',$className).'.php'; //echo $file; require $file; }}
所以我们只需要在入口文件引入这个Loader.php文件,并且用spl_autoload_register
函数注册,就实现了所有类的自动载入。
<?php// 定义根目录define('BASEDIR', __DIR__);include BASEDIR.'/IMooc/Loader.php';spl_autoload_register('\\IMooc\Loader::autoload');IMooc\Object::test();App\Controller\Home\Index::test();
0 0
- 类自动载入、开发一个PSR-0的基础框架
- 自动载入实战---构造一个PSR-0的简易框架
- PSR-4 自动载入
- PHP PSR风格自动加载类的一个坑
- php 一个简单的符合PSR-0规范的框架
- php设计模式 一 (命名空间 类自动载入 PSR标准)
- 浅谈PSR规范与PHP框架中类的自动加载原理
- PSR-0 类自动加载规范
- php类的自动加载标准PSR-4官方原文翻译,PSR-4中文版
- 【php】自动加载类autoload psr-0与psr-4标准
- 0. PSR-0 --- 自动加载
- PSR-0 自动加载标准
- PSR-4与PSR-0的区别
- 慕课网----大话PHP设计模式 一(命名空间,类的自动加载,PSR-0)
- PHP设计模式 一(命名空间,类的自动加载,PSR-0)
- php自动加载PSR-0原文翻译,PSR-0中文版
- PSR-0规范的一个简单例子实践
- js实现自动设置框架载入页面高度的问题
- Git hooks 的学习笔记
- AngularJS 服务
- ftp的url格式
- 静态代码分析工具汇总
- 李宏毅--Machine Learning and having it deep and structured
- 类自动载入、开发一个PSR-0的基础框架
- [玄学分治 || 线段树] BZOJ 2675 Bomb & Tsin 1322 Bomb(李超)
- Linux Top 命令结果说明
- 范式应用于数据库设计
- 两层循环同步进行
- 二,leveldb源码分析(status)
- http 请求字符串 包含 请求行 请求头 求情正文
- 2016年年终总结
- Spark算子:RDD键值转换操作(2)–combineByKey、foldByKey