大多数框架都有自动加载器

时间:2011-06-04 22:22:26

标签: php zend-framework frameworks autoload

我使用的框架(Zend)有一个自动加载器构建它。我认为这个自动加载器负责加载,不仅是Zend本身,还有开发人员可能添加到项目中的任何其他库。

框架是否正常使用自动加载器?任何没有?

拥有自动加载器是否必要

5 个答案:

答案 0 :(得分:4)

默认情况下,

ZF's Autoloader只会加载ZF的类。它可以(并且应该)配置为加载自定义类,您还可以从其他框架添加其他Autoloader。除了PSR-0 autoloader之外,ZF 2还将有一个类图自动加载器。请参阅Blog Post by ZF's Matthew Weier O'Phinney on Autoloading Benchmarks

是的,拥有自动加载器很常见,因为您不希望代码中出现require语句。但这并不是绝对必要的。实现自动加载的本地方式是使用spl_autoload_register

答案 1 :(得分:2)

不是没有必要,但非常方便。您不需要大量的includesrequires,只有当您需要它所包含的类时才会加载单位。这也可以帮助您构建代码,因为不正确的命名会导致自动加载器失败。

答案 2 :(得分:2)

许多框架都有自动加载器,其中一个不是 CodeIgniter ,您必须指定要一直加载哪些类以及要在控制器/模型/视图中加载哪些类/ libraries。

这不是完全必要的,但它很好,因为它通常强制执行文件结构,您也不必担心记住在脚本顶部包含文件。

<强> [编辑]

我的CodeIgniter声明显然需要澄清。是的,有一个auto_load位置,允许您指定要在每个脚本开头自动加载的库/模块,是的,有一个加载程序库,但它们与真正的自动加载器不同。

您必须在开始时指定您想要的那些,在您使用自定义

之前,它不知道您要加载Pizza_Store模型
$this->load->model->('foo');

相当于

include 'application/models/foo.php';
$this->Foo = new foo();

但实际上只需要调用$this->foo = new Models_Foo();和CodeIgniter就知道你的意思了,这就是使用自动加载器时会发生的情况。

[编辑零件代表]

现在代码中有__autoloadspl_autoloadspl_autoload_register。这是因为它保持了PHP 4的兼容性。这就是构建框架的方式,如上所述,有一个错误的自动加载,但它为每个“自动加载”类执行此操作:

foreach($autoloaded_class as $type=>$class){
    if(is_application_class($class)){
        include "application/{$type}/{$class}.php";
    }
    elseif(is_core($class)){
        include "core/{$type}/{$class}.php";
    }
}
$array['Foo'] = new Foo();
$controller($array);

本质上是在呼唤:

包括'foo.php';

位于每个文件的顶部,无论您是否需要它。

答案 3 :(得分:2)

是,通常的做法在框架中包含自动加载器。

不,我没想到没有自动加载器的任何主要框架。

是的,如果您希望框架足够灵活,则有必要。它简化了模块/类的添加,只需将文件复制到正确的目录并从代码中调用它们即可。 Autoloader只包含适当的文件,而不是包含所有文件(即使目前不需要它们)。

此外,类自动加载的方式可以由自动加载器机制完全确定,例如强制执行。正确的目录结构或强制事先声明可以自动加载的类/文件。

答案 4 :(得分:2)

正如其他成员所说,并非每个框架都有自动加载器,但我相信每个框架都应该。

如果您能理解框架的作用,那么您应该了解其设计为模块化,能够轻松添加和删除组件,如果您要对所有库模型,控制器等进行硬编码,那么在添加新库时你必须重新编码才能使用它。

这是自动加载器的便利部分,另一部分是性能和资源管理方面,自动加载器的基本思想是仅在需要时加载文件。

所以在你的index.php页面上你可能需要5个库,但是在你的register.php上你可能只需要2个库,所以使用自动加载器可以在你的注册页面上保存3个包含。

它还允许更好的文件结构,因为您的组件是分开和组织的。

因为您可能正在考虑将自动加载器放入您的框架中,我强烈建议您查看当前在Zend和许多其他高端框架中使用的 PSR-0 标准,链接可以在下面找到:

http://groups.google.com/group/php-standards/web/psr-0-final-proposal