zl程序教程

您现在的位置是:首页 >  后端

当前栏目

php_autoload自动加载类与机制分析

PHP自动 分析 机制 加载 autoload
2023-06-13 09:14:32 时间
在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可
test.class.php
复制代码代码如下:

<?php
classabc{
function__construct()
{
echo"www.hzhuti.com;
}
}
?>

load.php
代码如下
复制代码代码如下:

<?php
classLOAD
{
staticfunctionloadClass($class_name)
{
$filename=$class_name.".class.php";
if(is_file($filename))returninclude_once$filename;
}
}
/**
*设置对象的自动载入
*spl_autoload_register—Registergivenfunctionas__autoload()implementation
*/
spl_autoload_register(array("LOAD","loadClass"));
$a=newTest();//实现自动加载,很多框架就用这种方法自动加载类
?>

__autoload()
在实际项目中,不可能把所有的类都写在一个PHP文件中,当在一个PHP文件中需要调用另一个文件中声明的类时,就需要通过include把这个文件引入。不过有的时候,在文件众多的项目中,要一一将所需类的文件都include进来,一个很大的烦恼是不得不在每个类文件开头写一个长长的包含文件的列表。我们能不能在用到什么类的时候,再把这个类所在的php文件导入呢?
为此,PHP提供了__autoload()方法,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在PHP出错失败前有了最后一个机会加载所需的类。
__autoload()方法接收的一个参数,就是欲加载的类的类名,所以这时候需要类名与文件名对应,如Person.php,对应的类名就是Pserson。
下面看个完整的实例
复制代码代码如下:
classClassA{
publicfunction__construct(){
echo“ClassAloadsuccess!”;
}
}
//定义一个类ClassA,文件名为ClassA.php
classClassA{
publicfunction__construct(){
echo“ClassAloadsuccess!”;
}
}
classClassBextendsClassA{
publicfunction__construct(){
//parent::__construct();
echo“ClassBloadsuccess!”;
}
}
//定义一个类ClassB,文件名为ClassB.php,ClassB继承ClassA
classClassBextendsClassA{
publicfunction__construct(){
//parent::__construct();
echo“ClassBloadsuccess!”;
}
}

定义两个测试用的类之后,我们来编写一个含有__autoload()方法的PHP运行程序文件如下:
复制代码代码如下:
function__autoload($classname){
$classpath=”./”.$classname.".php";
if(file_exists($classpath)){
require_once($classpath);
}
else{
echo‘classfile".$classpath."notfound!";
}
}
$newobj=newClassA();
$newobj=newClassB();