ASCII码 ASCII码

PHP实现自动加载机制

发布于:2022-03-11 10:12:06  栏目:技术文档

这篇文章主要介绍了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实现自动加载机制的文章就介绍到这了

相关推荐
阅读 +