这篇文章主要介绍了PHP实现自动加载机制,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

php自动加载
php自动载方法有两种.

第一种方案用__autoload,这个函数较简单,也较弱.

但有一问题没有解决, 就是在include前判断文件是否存在的问题.

  1. set_include_path('aa' . PATH_SEPARATOR . get_include_path());
  2. function __autoload($className)
  3. {
  4. //如果加这个检测, 因为此文件不在当前目录下,它就会检测不到文件存在,
  5. //但include是能成功的
  6. if (file_exists($className . '.php')) {
  7.   include_once($className . '.php');
  8. } else {
  9. exit('no file');
  10. }
  11. }
  12. $a = new Acls();

第二种方案用spl自动加载,这里具体说一下这个.

spl_autoload_register()

一个简单的例子

  1. set_include_path('aa' . PATH_SEPARATOR . get_include_path());
  2. //function __autoload($className)
  3. //{
  4. // if (file_exists($className . '.php')) {
  5. // include_once($className . '.php');
  6. // } else {
  7. // exit('no file');
  8. // }
  9. //}
  10. spl_autoload_register();
  11. $a = new Acls();

spl_autoload_register()会自动先调用spl_autoload()在路径中查找具有小写文件名的”.php”程序.默认查找的扩展名还有”.ini”,还可以用spl_autoload_extenstions()注册扩展名.

在找不到的清况下,还可以通过自己定义函数查找

  1. function loader1($class)
  2. {
  3. //自己写一些加载的代码
  4. }
  5. function loader2($class)
  6. {
  7. //当loader1()找不到时,我来找
  8. }
  9. spl_autoload_register('loader1');
  10. spl_autoload_register('loader2');

还可以更多……..

MVC框架是如何实现自动加载的

首先设置路径

$include = array(‘application/controllers’, ‘application/models’, ‘application/library’);

set_include_path(get_include_path() . PATH_SEPARATOR .implode(PATH_SEPARATOR, $config[‘include’]));

在获取URL,解析出控制器与方法.

然后设置自动加载

  1. class Loader
  2. {
  3. /**
  4. * 自动加载类
  5. * @param $class 类名
  6. */
  7. public static function autoload($class)
  8. {
  9. $path = '';
  10. $path = str_replace('_', '/', $class) . '.php';
  11. include_once($path);
  12. }
  13. }
  14. /**
  15. * sql自动加载
  16. */
  17. spl_autoload_register(array('Loader', 'autoload'));

路由,实例化控制器,调用方法,你写的东西就开始执行了

  1. /**
  2. * 路由
  3. */
  4. public function route()
  5. {
  6. if (class_exists($this->getController())) {
  7. $rc = new ReflectionClass($this->getController());
  8. if ($rc->hasMethod($this->getAction())) {
  9. $controller = $rc->newInstance();
  10. $method = $rc->getMethod($this->getAction());
  11. $method->invoke($controller);
  12. } else
  13. throw new Exception('no action');
  14. } else
  15. throw new Exception('no controller');
  16. }

初步的自动加载就完成了

到此这篇关于PHP实现自动加载机制的文章就介绍到这了

更多相关文章

  1. php rename错误原因的查找方法
  2. Android中使用查找提示
  3. Android(安卓)build system 分析之 envsetup.sh
  4. vscode下载安装配置
  5. Android(安卓)笔记
  6. sql server 临时表 查找并删除的实现代码
  7. mssql查找备注(text,ntext)类型字段为空的方法
  8. SQL查找某一条记录的方法
  9. sqlserver中查找所有包含了某个文本的存储过程

随机推荐

  1. Android关于网络连通状况的系统广播
  2. Android Broadcast(广播)简单样例
  3. 初学Andriod之跑马灯属性设置
  4. 最全的 Android 生命周期图
  5. android 输入法出现挤压屏幕
  6. Android手势下拉抽屉效果
  7. Android--取出SDcard卡上指定后缀名的文
  8. Android连续点击两次返回键退出App
  9. Android SDK 2.1 install
  10. Android磨砂效果