PHP类的__autoload()方法

__autoload()方法并不是类定义的相关方法,而是一种PHP文件自动加载机制,但它主要是针对“类”,所以,我们就在本章一起介绍了。

在一个PHP文件中,如果我们使用了一个当前文件内没有定义过的类,就可以利用系统中定义的__autoload()方法自动查询相应的PHP文件;习惯的用法是,将每一个类的定义以同名的.php文件存放在固定的位置,如我们前面使用过的/lib目录下,这样,我们就可以通过类的名称很方便地找到相应的.php文件了。

如下面的代码,我们首先创建/lib/CDemo.php文件,其中定义了CDemo类。

<?php  

class CDemo  
{  
    public static $author = 'caohuayu.com';  
    public function showInfo()  
    {  
        echo 'PHP Library';  
    }  
}  

?>

在CDemo类中,我们定义了一个静态变量$author和一个实例方法showInfo()。接下来,我们的工作就是创建__autoload()方法,这是一个系统级的方法,如何定义呢?

在项目中,可能有很多系统资源需要配置和初始化,我的方案是在/lib目录中创建一个名为init.php的文件,它的作用就是完成PHP环境中通用的配置与资源初始化工作,我们就将__autoload()方法定义在这个文件中吧。如下面的代码。

<?php  

function __autoload(className)  
{     require_once_SERVER["DOCUMENT_ROOT"]."/lib/$className.php";  
}  

?>

现在,我们返回index.php文件,创建如下代码。

<?php  

require_once _SERVER['DOCUMENT_ROOT'].'/lib/init.php';  

echo CDemo::author;  // 显示caohuayu.com  
echo '<br>';  
demo = new CDemo();demo->showInfo();  // 显示PHP Library  

?>

代码中,我们并没有直接引用CDemo.php文件,但是,我们可以看到,当我们使用CDemo类时,无论是使用它的静态成员,或者创建它的实例(对象),通过init.php文件中定义的__autoload()方法,都能够自动加载CDemo.php文件。

使用__autoload()方法需要注意的是,如果指定规则下找不到相应的类文件,则会产生错误,此时,我们应该有一个系统的错误处理机制来处理,因为代码找不到类的定义,是没有办法再正确的执行下去了。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程