php类的注册与自动加载方法分享

介绍下,php中类的注册与自动加载 的方法。

工程目录如下:

php类的注册与自动加载方法分享

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

<?php

/*

* 类注册到数组 

* edit by www.jbxue.com

*/

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

/**

* 注册数组

* edit by www.jbxue.com

*/

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

<?

/**

* 引入包含文件

* edit by www.jbxue.com

*/

php

require_once 'Init.php';

$dao = new UserDao();

$result = $dao->findByName('zcl');

?>

你可能感兴趣的:(PHP)