PHP __autoload函数(自动载入类文件)的使用方法

 更新时间:2012年02月04日 16:16:46   作者:  
在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都存放在一个单独的文件里,这样会很容易实现对类进行复用,同时将来维护时也很便利
这也是OO设计的基本思想之一。在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可。下面是一个实际的例子:
复制代码 代码如下:

class ClassA{
public function __construct(){
echo “ClassA load success!”;
}
}
//定义一个类ClassA,文件名为ClassA.php
class ClassA{
public function __construct(){
echo “ClassA load success!”;
}
}
class ClassB extends ClassA {
public function __construct(){
//parent::__construct();
echo “ClassB load success!”;
}
}
//定义一个类ClassB,文件名为ClassB.php,ClassB继承ClassA
class ClassB extends ClassA {
public function __construct(){
//parent::__construct();
echo “ClassB load success!”;
}
}
定义两个测试用的类之后,我们来编写一个含有__autoload()方法的PHP运行程序文件如下:
function __autoload($classname){
$classpath=”./”.$classname.'.php';
if(file_exists($classpath)){
require_once($classpath);
}
else{
echo ‘class file'.$classpath.'not found!';
}
}

$newobj = new ClassA();
$newobj = new ClassB();

这个文件的运行是一点问题都没有的,可见autoload是多么的好用啊,呵呵……
但是不得不提醒你一下几个方面是必须要注意的。
1、如果类存在继承关系(例如:ClassB extends ClassA),并且ClassA不在ClassB所在目录
利用__autoload魔术函数实例化ClassB的时候就会受到一个致命错误:
Fatal error: Class ‘Classd' not found in ……ClassB.php on line 2,
解决方法:把所有存在extends关系的类放在同一个文件目录下,或者在实例化一个继承类的时候在文件中手工包含被继承的类;
2、另外一个需要注意的是,类名和类的文件名必须一致,才能更方便的使用魔术函数__autoload;
其他需要注意的事情:
3、在CLI模式下运行PHP脚本的话这个方法无效;
4、如果你的类名称和用户的输入有关——或者依赖于用户的输入,一定要注意检查输入的文件名,例如:.././这样的文件名是非常危险的。

相关文章

  • PHP令牌 Token改进版

    PHP令牌 Token改进版

    那个版本中,存在一个小问题,因为要做可逆加密,而加密出来的字符是不可显示字符+乱码,所以我用了 base64对其进行了处理,这样一来,就不会有乱码和不可显示字符了。
    2008-07-07
  • php5中date()得出的时间为什么不是当前时间的解决方法

    php5中date()得出的时间为什么不是当前时间的解决方法

    从php5.10开始,php中加入了时区的设置,在php中显示的时间都是格林威治标准时间,这就造成了我们 中国的用户会差八个小时的问题!
    2008-06-06
  • PHP DB 数据库连接类定义与用法示例

    PHP DB 数据库连接类定义与用法示例

    这篇文章主要介绍了PHP DB 数据库连接类定义与用法,涉及php基于mysqli针对数据库的连接、增删改查等常见操作封装与使用技巧,需要的朋友可以参考下
    2019-03-03
  • PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法

    PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法

    北京时间是东8区,可能是时区问题.但是此前都没问题啊,经过google发现原来从php5.1.0开始,php.ini里加入了 date.timezone这个选项,默认情况下是关闭的
    2009-05-05
  • php实现通用的信用卡验证类

    php实现通用的信用卡验证类

    这篇文章主要介绍了php实现通用的信用卡验证类,涉及信用卡的规则与php字符串操作的相关技巧,具有一定参考借鉴价值,文中有英文原文注释说明,有助于更直观的了解源码相关信息,需要的朋友可以参考下
    2015-03-03
  • PHP实现的简单AES加密解密算法实例

    PHP实现的简单AES加密解密算法实例

    这篇文章主要介绍了PHP实现的简单AES加密解密算法,结合具体实例形式分析了php基于mcrypt_encrypt、bin2hex、mcrypt_decrypt等方法进行字符串加密解密的相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • 两种设置php载入页面时编码的方法

    两种设置php载入页面时编码的方法

    设置php页面编码的方法有两种,一是输出meta标签,二是使用header函数,下面为大家详细介绍下
    2014-07-07
  • PHP项目开发中最常用的自定义函数整理

    PHP项目开发中最常用的自定义函数整理

    PHP项目开发中最常用的自定义函数,php开发中,经常需要用到的。其实很多成熟的cms系统中都有的。
    2010-12-12
  • PHP 彩色文字实现代码

    PHP 彩色文字实现代码

    最近流行彩字,下面是简单的实现代码。喜欢php的朋友可以看看。
    2009-06-06
  • php常用hash加密函数

    php常用hash加密函数

    这篇文章主要介绍了php常用hash加密函数,以实例形式详细分析了PHP的hash加密函数用法,代码中备有详尽的注释,便于理解,需要的朋友可以参考下
    2014-11-11

最新评论