ClassMapAutoLoader和onBootstrap有什么不同?

时间:2014-03-15 11:01:36

标签: zend-framework2

ClassMapAutoLoaderonBootstrap之间的区别是什么?

1 个答案:

答案 0 :(得分:2)

Class Map Autoloader

Web应用程序由许多PHP类组成,每个类通常驻留在单独的文件中。这引入了包含文件的需要。

随着应用程序规模的扩大,可能难以包含 每个需要的文件。 Zend Framework 2本身由数百个文件组成, 并且加载整个库及其所有库可能非常困难 依赖这种方式。而且,在执行生成的代码时,PHP解释器会 即使您没有创建,也需要CPU时间来处理每个包含的文件 它的类的实例。

为了解决这个问题,在PHP 5.1中,引入了类自动加载功能。 PHP函数spl_autoload_register()允许您注册 自动加载器功能。对于复杂的网站,您甚至可以创建 几个自动加载器功能,链接在一个堆栈中。

在脚本执行期间,如果PHP解释器遇到类名 它尚未定义,它调用所有已注册的自动加载器功能 反过来,直到自动加载器功能包括类或“未找到”错误为止 提高。当PHP解释器处理类时,这允许“延迟”加载 仅在类调用的时刻定义,当它确实需要时。

为了让您了解自动加载器功能的外观,下面我们提供一个 简化了自动加载器功能的实现:

<?php
// Autoloader function.
function autoloadFunc($className) {

  // Class map static array.
  static $classMap = array(
    'Zend\\Mvc\\Application' => '/path/to/zend/dir/Zend/Mvc/Application.php',
    'Application\\Module' => '/path/to/app/dir/Application/Module.php',
    //...
  );

  // Check if such a class name presents in the class map.
  if(isset(static::$classMap[$className])) {
    $fileName = static::$classMap[$className];

    // Check if file exists and is readable.
    if (is_readable($filename)) {
      // Include the file.
      require $filename;
    }
  }
}

// Register our autoloader function.
spl_autoload_register("autoloadFunc");

在上面的例子中,我们定义了autoloadFunc()自动加载器功能, 我们将进一步称之为类地图自动加载器。

类映射自动加载器使用类映射在类名和之间进行映射 包含该类的PHP文件的绝对路径。类映射只是一个普通的PHP 包含键和值的数组。要按类名确定文件路径,请执行 类映射自动加载器只需要从类映射数组中获取值。 很明显,类地图自动加载器的工作速度非常快。但是,缺点 这是你必须维护类映射并在每次添加新映射时更新它 上课程。

onBootstrap

在每个HTTP请求中,Zend\Mvc\Application 对象已创建。应用程序的“生命”包含几个阶段。

Zend Framework 2使用 event 的概念。一个类可以触发一个事件, 和其他类可以监听到事件。从技术上讲,触发事件意味着只调用另一个类的“回调”方法。事件管理在里面实现 Zend\Mvc\EventManager组件。

每个应用程序生命周期由应用程序通过触发事件启动。其他 类(属于Zend Framework或特定于您的应用程序)可能会听 事件和相应的反应。

下面列出了四个主要事件(生命阶段):

<强>自举即可。当应用程序触发此事件时,模块有机会 在onBootstrap()注册自己作为进一步应用事件的监听者 回调方法。

<强>路线即可。触发此事件时,将使用路由器类(通常使用。)分析请求的URL Zend\Mvc\Router\Http\TreeRouteStack课程。如果URL和路由之间完全匹配 找到后,请求将传递给分配给路由的特定于站点的控制器类。

<强>调度即可。控制器类使用相应的操作方法“调度”请求 并生成可以在网页上显示的数据。

<强>渲染即可。在此事件中,控制器的action方法生成的数据将被传递以进行渲染 Zend\View\Renderer\PhpRenderer课程。渲染器类使用a 查看模板文件,用于生成HTML页面。

为了让初学者更好地理解上述概念,我会推荐Zend Framework 2.0 by Example: Beginner’s Guide本书或Using Zend Framework 2电子书。你可以自己选择这本书。