`
xiaoqiang6775
  • 浏览: 32745 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PHP __autoload

 
阅读更多

 

(1) autoload机制概述

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

/* Person.class.php */
<?php
class Person {
var $name, $age;

function __construct ($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>

/* no_autoload.php */
<?php
require_once (”Person.class.php”);

$person = new Person(”Altair”, 6);
var_dump ($person);
?>
 

在这个例子中,no-autoload.php文件需要使用Person类,它使用了require_once将其包含,然后就可以直接使用Person类来实例化一个对象。

但随着项目规模的不断扩大,使用这种方式会带来一些隐含的问题:如果一个PHP文件需要使用很多其它类,那么就需要很多的require/include语句,这样有可能会造成遗漏或者包含进不必要的类文件。如果大量的文件都需要使用其它的类,那么要保证每个文件都包含正确的类文件肯定是一个噩梦。

PHP5为这个问题提供了一个解决方案,这就是类的自动装载(autoload)机制。autoload机制可以使得PHP程序有可能在使用类时才自动包含类文件,而不是一开始就将所有的类文件include进来,这种机制也称为lazy loading。

下面是使用autoload机制加载Person类的例子:/* autoload.php */

<?php
function __autoload($classname) {
       require_once ($classname . “class.php”);
}

$person = new Person(”Altair”, 6);
var_dump ($person);
?>
 

通常PHP5在使用一个类时,如果发现这个类没有加载,就会自动运行__autoload()函数,在这个函数中我们可以加载需要使用的类。在我们这个简单的例子中,我们直接将类名加上扩展名”.class.php”构成了类文件名,然后使用require_once将其加载。从这个例子中,我们可以看出autoload至少要做三件事情,第一件事是根据类名确定类文件名,第二件事是确定类文件所在的磁盘路径(在我们的例子是最简单的情况,类与调用它们的PHP程序文件在同一个文件夹下),第三件事是将类从磁盘文件中加载到系统中。第三步最简单,只需要使用include/require即可。要实现第一步,第二步的功能,必须在开发时约定类名与磁盘文件的映射方法,只有这样我们才能根据类名找到它对应的磁盘文件。

因此,当有大量的类文件要包含的时候,我们只要确定相应的规则,然后在__autoload()函数中,将类名与实际的磁盘文件对应起来,就可以实现lazy loading的效果。从这里我们也可以看出__autoload()函数的实现中最重要的是类名与实际的磁盘文件映射规则的实现。

来自于:http://space.itpub.net/14883374/viewspace-526720

分享到:
评论

相关推荐

    php __autoload自动加载功能详解

    spl_autoload_register('autoload_function'); ``` 在这个例子中,`$class_name`是未定义的类名,我们将其转换为文件路径,然后尝试包含对应类的文件。如果文件不存在,将输出错误信息。 三、大写字母位置查找算法...

    PHP中spl_autoload_register()和__autoload()区别分析

    本文将详细分析PHP中的两种自动加载方法:spl_autoload_register() 和 __autoload(),从而帮助开发者理解两者的区别,并做出更合理的选择。 首先来看__autoload()函数。__autoload()是PHP早期版本中用来自动加载类...

    PHP函数spl_autoload_register()用法和__autoload()介绍

    不过,随着PHP的发展,在PHP5之后,引入了更为强大的spl_autoload_register()函数来替代__autoload()函数。 __autoload()函数是PHP的一个魔术方法,它会在尝试使用尚未被定义的类时自动被调用。在__autoload()函数...

    PHP中spl_autoload_register()函数用法实例详解_.docx

    `spl_autoload_register()`函数是PHP SPL(Standard PHP Library)扩展中用于实现自动加载的核心函数。本文将深入探讨`spl_autoload_register()`的用法及其在实际开发中的应用。 首先,我们来看一下`__autoload`...

    spl_autoload_register与autoload的区别详解

    spl_autoload_register(PHP 5 &gt;= 5.1.2)spl_autoload_register — 注册__autoload()函数说明bool spl_autoload_register ([ callback $autoload_function ] )将函数注册到SPL __autoload函数栈中。如果该栈中的函数...

    PHP中spl_autoload_register函数的用法总结

    spl_autoload_register函数是PHP中用于自动加载类定义文件的一个重要工具。在面向对象编程中,当使用尚未被定义的类时,PHP会抛出错误。为了避免在每次使用新类之前手动包含(require或include)类文件,可以利用PHP...

    php中使用__autoload()自动加载未定义类的实现代码

    然而,随着PHP 5的引入,最佳实践逐渐转向了使用SPL(Standard PHP Library)中的spl_autoload_register()函数来注册多个自动加载函数,这种做法更为灵活和健壮,尤其是在大型项目中。 尽管如此,了解__autoload()...

    PHP __autoload()方法真的影响性能吗?

    在讨论PHP的__autoload()方法对性能的影响时,首先要了解__autoload()的作用。在PHP中,__autoload()是一个魔术方法,当尝试使用尚未被定义的类时,PHP会自动调用这个方法。__autoload()的主要功能是在程序运行时...

    PHP中spl-autoload-register()函数用法实例详解-.docx

    PHP 中 spl_autoload_register() 函数用法实例详解 PHP 中的自动加载机制是指在实例化一个未定义的类时,系统自动加载该类的类文件。spl_autoload_register() 函数是 PHP 中的一个自动加载函数,用于注册自动加载...

    php中spl_autoload详解

    这样,当PHP尝试实例化一个未定义的类时,`spl_autoload_register` 就会按照注册的顺序逐个调用这些自动加载函数,直到找到并成功加载相应的类文件。 如果你希望实现更复杂的自动加载机制,可以创建自定义的自动...

    PHP中spl_autoload_register()函数用法实例详解

    在PHP编程中,`spl_autoload_register()` 是一个非常重要的函数,它用于注册自定义的自动加载函数,以便在尝试实例化未定义的类时自动加载相应的类文件。这个功能在大型项目中尤为有用,因为它可以帮助减少代码中的...

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

    但从PHP5开始,引入了__autoload魔术函数,用以自动加载类文件,简化了面向对象的代码结构。 __autoload函数是在尝试使用尚未定义的类时自动被调用,它只接收一个参数,即未定义类的名称。开发者可以在这个函数中...

    PHP spl_autoload_register实现自动加载研究

    在PHP编程中,`spl_autoload_register`是一个非常重要的函数,它用于实现自动加载功能,大大简化了类库和对象的加载过程。自动加载机制允许我们无需显式地使用`require`或`include`来引入类文件,而是当尝试访问尚未...

    autoload机制

    如果`autoload_func`指向某个PHP函数,那么会直接执行那个函数,而不考虑`__autoload()`。 4. **SPL(Autoload)机制** SPL全称为Standard PHP Library,是PHP5引入的扩展库,提供了一系列迭代器和自动加载功能。SPL...

    PHP中spl-autoload-register()函数用法实例详解-.pdf

    PHP 中 spl_autoload_register() 函数用法实例详解 spl_autoload_register() 函数是 PHP 中用于自动加载类的函数,作用类似于 __autoload 函数。下面我们将详细介绍 spl_autoload_register() 函数的用法实例。 一...

Global site tag (gtag.js) - Google Analytics