欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-20 15:57:16
工程目录如下:1、将需要注册的类放在一个数组中复制代码 代码如下:

工程目录如下:

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