根据前一篇文章的设计原则,我们暂时把php文件分为3类,类名和文件名都遵守如下约定。

  类名 文件名 路径
模型类m {$app}Mod  {$app}.mod.php {$app}/model  
控制器类c {$app}Ctl {$app}.ctl.php {$app}/control
其他 {$app} {$app}.cls.php {$app}/class

可以实现一个简单的autoload函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function uct_autoload($class_name) {
    $auto_path array(
        'ctl' => 'control',
        'mod' => 'model',
        'cls' => 'class',        
    );
    $key       strtolower(substr($class_name, -3));
    if (isset($auto_path[$key])) {
        $dir $auto_path[$key] . DS . strtolower(substr($class_name, 0, -3)) . '.' $key '.php';
    else {
        $dir 'class' . DS . strtolower($class_name) . '.cls.php';
    }   
   
    if (!empty($GLOBALS['_UCT']['autoload'])) {
        foreach ($GLOBALS['_UCT']['autoload'as $app) {
            if (file_exists(UCT_PATH . 'app' . DS . $app . DS . $dir)) {
                return include UCT_PATH . 'app' . DS . $app . DS . $dir;
            }   
        }   
    }   
        
    if (file_exists(UCT_PATH . 'framework' . DS . $dir)) {
        return include UCT_PATH . 'framework' . DS . $dir;
    }   
    echo 'auto_load not found! ' $class_name;
    exit(1);
}

如果想使用另一个模块里的函数可以使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function uct_use_app($app) {
    if (empty($GLOBALS['_UCT']['autoload'])) {
        $GLOBALS['_UCT']['autoload'] = array(
            $app
        );
        return true;
    }
    if (!in_array($app$GLOBALS['_UCT']['autoload'])) {
        array_unshift($GLOBALS['_UCT']['autoload'], $app);
        return true;
    }
    
    return false;
}

转载于:https://www.cnblogs.com/yyluming/p/5171098.html

如何实现一个php框架系列文章【2】实现类的自动加载相关推荐

  1. 手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏06加载游戏背景

    游戏背景 Background.java package world;import sprite.Sprite;import java.awt.*;public class Background {p ...

  2. thinkphp 框架自动加载原理_这下你应该理解ThinkPHP的Loader自动加载了

    想了很久终于要开始系列文章的编写了,期望是写出提升和面试都可以搞定的系列文章. 当你看到本文时,如果你发现咔咔没有编写到的面试热点问题或者技术难点,期待评论区指出,一起完善. 前言 目前再整理PHP进 ...

  3. thinkphp 框架自动加载原理_thinkPHP5.0框架自动加载机制分析

    本文实例讲述了thinkPHP5.0框架自动加载机制.分享给大家供大家参考,具体如下: 概述 ThinkPHP5.0 真正实现了按需加载,所有类库采用自动加载机制,并且支持类库映射和composer类 ...

  4. 无锁编程(Lock Free)框架 系列文章

    无锁编程(Lock Free)框架 系列文章: 1 前置知识:伪共享 原理 & 实战 2 disruptor 使用和原理 图解 3 akka 使用和原理 图解 4 camel 使用和 原理 图 ...

  5. thinkphp 框架自动加载原理_ThinkPHP5分析Part 1 基本框架流程

    ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能 ...

  6. php 实现自动加载更多,$.ajax+php实战教程之下拉时自动加载更多文章原理分析二...

    摘要: 继上一篇<$.ajax+php实战教程之下拉时自动加载更多文章原理分析>文章进行进一步讲解,完善之前的代码及引入ajax和php相关内容...... 上次留下的问题不知道看官们有没 ...

  7. php ci框架 实例化类,php框架CI(codeigniter)自动加载与自主创建对象操作实例分析...

    本文实例讲述了php框架CI(codeigniter)自动加载与自主创建对象操作.分享给大家供大家参考,具体如下: CI的autoload很好用,自动创建对象,但是注意,他的对象只有一个. 我们很多情 ...

  8. phpexcel的自动加载与其他框架有冲突

    2019独角兽企业重金招聘Python工程师标准>>> 一直想用phpEXCEL,这次这个项目遇到了.然而坑也出来了.phpexcel的Autoloader.php里面 public ...

  9. PHP框架自动加载类文件原理

    描述:公司项目PHP用作中间转发层(接收http请求,用 socket跟c++做通信),由于代码没有用到框架,这些东西自然就是之前的人自己写的.最近需要对这个底层进行优化,于是便看了下这部分的代码. ...

最新文章

  1. Zabbix 4.2 发布:支持Prometheus数据收集,可扩展性大大提升
  2. 悬停渐变特效html,CSS3 transition属性实现hover渐变动画效果
  3. js面向对象和继承的碎碎念
  4. 流放之路材质过滤怎么设置_房子装修,前置过滤器怎么选?看这6个要点
  5. .net打包自动安装数据库
  6. 5分钟带你看懂 GCanvas渲染引擎的演进
  7. 怎样在html中显示时间,如何在网页上显示当前时间
  8. android 调试好事工具类,Android 工具类之总结 Hua
  9. 整数分解为若干项之和python_SVD奇异值分解及Python实例
  10. putty界面最友好的颜色配置参考
  11. 55.购物流程(2)---configurable product
  12. paddle serving
  13. h5/uni-app打开手机app,没有则跳转到商店下载
  14. Promise的resolve和reject使用
  15. 飞猪 Serverless 体系从无到有,落地10余个业务场景
  16. 201224-MacOS使用Mounty非安全退出NFTS后磁盘无法加载
  17. 百度APP“看听模式”:“AI主播”借道信息流全面落地?
  18. 开源一个win10二十四节气壁纸自动更换的程序
  19. 各类数值型数据间的混合运算
  20. SRM 453.5(Div1)

热门文章

  1. 访问某个xml的url并将网页转成字节流
  2. 避免门事件 巧妙清除搜狗浏览器记录
  3. javascript继承的原理
  4. java对象关系_【java类和对象的关系】
  5. c# oldb连接_C# 连接数据库(ODBC、Oledb、Oracle)
  6. 加速Qt在线更新--使用traefik-1.7.24(不支持traefik-2.0以上版本
  7. android shape 绘制气泡图,气泡图-自定义 shape
  8. 华为鸿蒙原生app,华为鸿蒙开发者大赛颁奖典礼临近,鸿蒙原生应用来了
  9. JavaWeb——mybatis一对一、一对多查询
  10. 从外部访问Kubernetes集群中的应用