• 售前

  • 售后

热门帖子
入门百科

PHP实现主动加载机制

[复制链接]
永远爱你冰塘 显示全部楼层 发表于 2021-8-14 14:29:49 |阅读模式 打印 上一主题 下一主题
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实现主动加载机制的文章就先容到这了,更多相干PHP主动加载内容请搜刮草根技能分享从前的文章或继续浏览下面的相干文章盼望各人以后多多支持草根技能分享!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作