php自动加载

Posted on Posted in php
Tips: 本文创建于2014年4月13日,已超过 2 年,内容或图片可能已经失效!

自动加载
1、普通自动加载。__autoload()函数

[code lang="php"]
<?php
function __autoload($class_name){
require './' . $class_name . '.class.php';
}
var_dump($c1 = new C); // 会调用C.class.php文件
?>
[/code]

2、注册自动加载。spl_autoload_register(函数名);
一旦定义多个:每个方法都是自动加载方法,都被调用,顺序为先注册的先调用。是一个自动加载函数队列。
在此过程中,如果类被正确载入了,后续的自动加载方法不需要执行!
注意:
尽量要避免,当前模块的自动加载方法,去加载其他模块的类文件。
在实现自动加载方法时,要先对当前类名是否是当前模块内的类做判断。需要在类名上做一些标志。

[code lang="php"]
<?php
spl_autoload_register('self_autoload');
spl_autoload_register('other_autoload');
function self_autoload($class_name) {
echo 'SELF:', $class_name, '<br>';
require './' . $class_name . '.class.php';
}
function other_autoload($class_name) {
echo 'OTHER:', $class_name, '<br>';
require './' . $class_name . '.class.php';

}
?>
[/code]

3、多模块的自动加载

[code lang="php"]
<?php
//首页,图书模块
require './book/bookModule.php';
var_dump($b = new book_B);
//首页,电话模块
require './phone/phoneModule.php';
var_dump($p = new phone_P);
?>
[/code]

book_B.class.php文件

[code lang="php"]
<?php
class book_B {
}
?>
[/code]

phone_P.class.php文件

[code lang="php"]
<?php
class phone_P {
}
?>
[/code]

bookModule.php文件

[code lang="php"]
<?php
spl_autoload_register('book_autoload');
function book_autoload($class_name) {
//判断当前类名是否是_B结尾的类名
if (substr($class_name, -2) == '_B') {
echo 'BOOK:', $class_name, '<br>';
require './book/' . $class_name . '.class.php';
}
}
?>
[/code]

phoneModule.php文件

[code lang="php"]
<?php
spl_autoload_register('phone_autoload');
function phone_autoload($class_name) {
if (substr($class_name, -2) == '_P') {
echo 'PHONE:', $class_name, '<br>';
require './phone/' . $class_name . '.class.php';
}
}
?>
[/code]

» 转载请注明来源:若我若鱼 » php自动加载

Leave a Reply

Your email address will not be published. Required fields are marked *

1 × two =