当前位置:首页 > PHP教程 > PHP高级教程

解析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');
?>


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!