解析php类的注册与自动加载
程序员文章站
2023-11-20 15:57:16
工程目录如下: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');
?>
工程目录如下:
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');
?>