解析php类的注册与自动加载


Posted in PHP onJuly 05, 2013

工程目录如下:

解析php类的注册与自动加载

1、将需要注册的类放在一个数组中

<?php
final class Utils {
    private function __construct() {
    }
    public static function getClasses($pre_path = '/') {
        $classes = array(
                'DBConfig' => $pre_path.'DBConfig/DBConfig.php',
                'User' => $pre_path.'Model/User.php',
                'Dao' => $pre_path.'Dao/Dao.php',
                'UserDao' => $pre_path.'Dao/UserDao.php',
                'UserMapper' => $pre_path.'Mapping/UserMapper.php',
        );
        return $classes;
    }
}
?>

2、注册数组
注意:
步骤1中的类的路径都是相对于init.php而言的,不是相对于Utils而言的,这是因为我们通过init.php里的自动加载函数spl_autoload_register来require类的
<?php
require_once '/Utils/Utils.php';
final class Init {    /**
     * System config.
     */
    public function init() {
        // error reporting - all errors for development (ensure you have
        // display_errors = On in your php.ini file)
        error_reporting ( E_ALL | E_STRICT );
        mb_internal_encoding ( 'UTF-8' );
        //registe classes
        spl_autoload_register ( array ($this,'loadClass' ) );
    }
    /**
     * Class loader.
     */
    public function loadClass($name) {
        $classes = Utils::getClasses ();
        if (! array_key_exists ( $name, $classes )) {
            die ( 'Class "' . $name . '" not found.' );
        }
        require_once $classes [$name];
    }
}
$init = new Init ();
$init->init ();
?>

3、本例中在使用处test.php里require init.php
<?php
require_once 'Init.php';
$dao = new UserDao();
$result = $dao->findByName('zcl');
?>
PHP 相关文章推荐
浅析十款PHP开发框架的对比
Jul 05 PHP
浅析51个PHP处理字符串的函数
Aug 02 PHP
PHP实现今天是星期几的几种写法
Sep 26 PHP
php异常处理使用示例
Feb 25 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
PHP里8个鲜为人知的安全函数分析
Dec 09 PHP
PHP将session信息存储到数据库的类实例
Mar 04 PHP
PHP实现支持SSL连接的SMTP邮件发送类
Mar 05 PHP
smarty高级特性之过滤器的使用方法
Dec 25 PHP
Zend Framework教程之Application和Bootstrap用法详解
Mar 10 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
PHP中类与对象功能、用法实例解读
Mar 27 PHP
php 注册时输入信息验证器的实现详解
Jul 05 #PHP
php解析html类库simple_html_dom(详细介绍)
Jul 05 #PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
Jul 05 #PHP
如何在Ubuntu下启动Apache的Rewrite功能
Jul 05 #PHP
如何解决CI框架的Disallowed Key Characters错误提示
Jul 05 #PHP
浅析十款PHP开发框架的对比
Jul 05 #PHP
利用PHP实现短域名互转
Jul 05 #PHP
You might like
开源SNS系统-ThinkSNS
2008/05/18 PHP
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
JQuery的Pager分页器实现代码
2016/05/03 Javascript
限制复选框最多选择项的实现代码
2016/05/30 Javascript
概述VUE2.0不可忽视的很多变化
2016/09/25 Javascript
9个让JavaScript调试更简单的Console命令
2016/11/14 Javascript
Bootstrap CSS布局之代码
2016/12/17 Javascript
Angular的$http与$location
2016/12/26 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
2018/02/03 Javascript
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
vue-router两种模式区别及使用注意事项详解
2019/08/01 Javascript
VUE实现自身整体组件销毁的示例代码
2020/01/13 Javascript
JS使用Chrome浏览器实现调试线上代码
2020/07/23 Javascript
[01:15:44]首部DOTA2纪录片今日23时全网上映
2014/03/19 DOTA
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
Python中map和列表推导效率比较实例分析
2015/06/17 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
python使用re模块爬取豆瓣Top250电影
2020/10/20 Python
python实现图片转字符画
2021/02/19 Python
HTML5中meta属性的使用方法
2016/02/29 HTML / CSS
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
仓库管理计划书
2014/05/04 职场文书
药品营销专业毕业生自荐信
2014/07/02 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书
Python爬虫基础之初次使用scrapy爬虫实例
2021/06/26 Python
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL