php自动加载_PHP教程
程序员文章站
2022-05-24 09:37:53
...
php中有两种自动加载机制函数
[php]
__autoload();
spl_autoload_register();
1. __autoload()
可以将需要使用类的时候把文件加载到程序中
[php]
function __autoload($className) {
if (file_exists($className . '.php')) {
include $className . '.php';//可细化
} else {
echo $className . '.php is not exists.';
exit;
}
}
$indexController = new IndexController();
在程序的运行过程中,php会检测这个$className类是否已经加载,如果没有加载会去执行__autoload(),再去加载$className这个类。在实例化类的对象、访问类中的静态变量和方法等都会去检测类是否已经加载,是否有定义__autoload()函数,如果都没有就会报错。
在复杂点的系统中,用__autoload()来实现类的自动加载可能会很复杂。
2. spl_autoload_register()
[php]
spl_autoload_register();
$index = new Index();
spl_autoload_register()函数中没有参数,则会自动默认实现void spl_autoload ( string $class_name [,string $file_extensions ] )函数,默认支持.php和.ini
[php]
function load1($className) {
//include
}
function load2($className) {
//include
}
spl_autoload_register('load1');//注册到spl_autoload_functions
spl_autoload_register('load2');
$index = new Index();
会先通过load1去加载类,如果load1中没有,再通过load2去加载,如果还有以次类推。
实现一个自动加载方法比较多,这举例一个
[php]
class autoloader {
public static $loader;
public static function init()
{
if (self::$loader == NULL)
self::$loader = new self();
return self::$loader;
}
public function __construct()
{
spl_autoload_register(array($this,'model'));
spl_autoload_register(array($this,'helper'));
spl_autoload_register(array($this,'controller'));
spl_autoload_register(array($this,'library'));
}
public function library($class)
{
set_include_path(get_include_path().PATH_SEPARATOR.'/lib/');
spl_autoload_extensions('.library.php');
spl_autoload($class);
}
public function controller($class)
{
$class = preg_replace('/_controller$/ui','',$class);
set_include_path(get_include_path().PATH_SEPARATOR.'/controller/');
spl_autoload_extensions('.controller.php');
spl_autoload($class);
}
public function model($class)
{
$class = preg_replace('/_model$/ui','',$class);
set_include_path(get_include_path().PATH_SEPARATOR.'/model/');
spl_autoload_extensions('.model.php');
spl_autoload($class);
}
public function helper($class)
{
$class = preg_replace('/_helper$/ui','',$class);
set_include_path(get_include_path().PATH_SEPARATOR.'/helper/');
spl_autoload_extensions('.helper.php');
spl_autoload($class);
}
}
//call
autoloader::init();
?>
也可以根据自己的需要来设计实现
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频
专题推荐
-
独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
-
玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
-
天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
上一篇: 使用php将某个目录下面的所有文件罗列出来的方法详解_php技巧
下一篇: PS制作逼真的闪耀阳光
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论