首页 php教程 PHP开发 Zend Framework教程之Autoloading用法详解

Zend Framework教程之Autoloading用法详解

Jan 03, 2017 pm 12:47 PM
zend framework

本文实例讲述了Zend Framework教程之Autoloading用法。分享给大家供大家参考,具体如下:

一、概述

自动加载是一种机制,无需依赖手动编写PHP代码。参考»PHP手册自动加载,一旦自动加载器被定义,你试图使用一个没有定义的类或接口的情况下,它会自动被调用。

使用自动加载,在项目中你不必担心类的存放位置。定义一个良好定义的自动加载器,您不需要考虑一个类文件相对于当前类文件的位置,您只需使用类,自动加载器将自动查找文件。

此外,自动加载,确保只加载一次,提升了性能 -所以可以用它替代require_once()。

Zend Framework 鼓励使用自动加载,并提供了许多工具实现自动加载代码库以及应用程序代码。下面将介绍这些工具,以及如何有效地使用它们。

自动加载的实现约定

类命名约定

Zend Framework借鉴了 PEAR的想法,即类名与文件系统的1:1的关系。简单地说,下划线字符("_")替换目录分隔,以代表该文件的路径,然后添加后缀“.php”。例如,类“Foo_Bar_Baz”将对应文件系统上的"Foo/Bar/Baz.php"。假设已通过PHP的include_path设置类的位置,这使得可以通过 include() 和 require()找到相对include_path中设置的路径查找文件名。

此外,推荐使用供应商名称或项目名称作为前缀。这意味着,你写的所有的类都有一个共同的类前缀,例如,Zend Framework的所有代码前缀为“Zend_”。这种命名约定有助于防止命名冲突。在ZendFramework中,我们经常提到“namespace”前缀,要注意不要把它与PHP的本地命名空间混淆。

自动加载器设计约定

Zend Framework通过Zend_Loader_Autoloader实现支持自动加载的,主要提供有以下目标和设计元素:

提供命名空间匹配。如果类的命名空间前缀是没有注册的命名空间,会返回FALSE。

允许定义自动加载器作为一个备用的自动加载器。一个团队可能分布广泛,或使用一个为定义的命名空间前缀情况下,它会尝试匹配任何命名空间前缀。但是,这种做法是不推荐,因为它可能会导致不必要的查找。
允许开启禁止错误提示。 因此,默认情况下,它应该处于关闭状态。开发阶段,可以启用它。

可以自定义自动加载。一些开发商不希望使用Zend_Loader::loadClass()自动加载,但仍想使用Zend Framework的自动加载机制。 Zend_Loader_Autoloader允许使用自定义的自动加载。

允许使用SPL自动加载回调链。这样做的目的是允许指定额外的自动加载器 。

二、用法:

通常,只需将需要引入包含类,然后实例化它即可。由于Zend_Loader_Autoloader采用的单例模式,可以使用getInstance()方法来获取一个实例。

require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
登录后复制

默认情况下,可以加载命名空间前缀为"Zend_"或 "ZendX_"的任何类,只要确保已经指定include_path。
如果想使用其他的命名空间前缀?最好的,最简单的方法是调用registerNamespace() 方法。您可以通过传递一个单一的命名空间前缀,或一个数组:

require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace('Foo_');
$loader->registerNamespace(array('Foo_', 'Bar_'));
登录后复制

或者,你可以把Zend_Loader_Autoloader作为一个“备用”自动加载器。这意味着如果命名空间无论是否定义,都会尝试自动加载。

$loader->setFallbackAutoloader(true);
登录后复制

(注意:这种方式是不推荐的,尽量不要使用)。

Zend_Loader_Autoloader的内部实现是使用 Zend_Loader::loadClass() 加载类的。该方法的使用 include() 来尝试加载给定的类文件。 include()将返回一个布尔值,如果没有成功返回FALSE - 而且还发出PHP警告。 可能会导致以下问题:

如果启用了display_errors,警告将包含在输出中。

根据你所配置的error_reporting级别,它也可以输出到日志中。
可以禁止这些错误消息,具体如下:(但注意,display_errors启用时,错误日志将始终显示。)

$autoloader->suppressNotFoundWarnings(true);
登录后复制

选择一个Zend Framework的版本

ZendFramework/
|-- 1.9.2/
| |-- library/
|-- ZendFramework-1.9.1-minimal/
| |-- library/
|-- 1.8.4PL1/
| |-- library/
|-- 1.8.4/
| |-- library/
|-- ZendFramework-1.8.3/
| |-- library/
|-- 1.7.8/
| |-- library/
|-- 1.7.7/
| |-- library/
|-- 1.7.6/
| |-- library/

$autoloader->setZfPath($path, 'latest');
登录后复制
$autoloader->setZfPath($path, '1.8');
登录后复制
$autoloader->setZfPath($path, '1.7.7');
登录后复制

也可以使用配置文件

[production]
autoloaderZfPath = "path/to/ZendFramework"
autoloaderZfVersion = "1.7.7"
[qa]
autoloaderZfVersion = "1.8"
[development]
autoloaderZfVersion = "latest"
登录后复制

Autoloader接口

注:命名空间前缀和PHP命名空间

PHP5.3已经发布。该版本中,PHP现在已经正式支持命名空间。

然而,Zend Framework的命名空间和PHP 5.3的命名空间完全不同的。 Zend Framework中,提到的“命名空间”,是指一个类前缀。例如,所有的Zend Framework的类名称的前缀“Zend_”。 这是我们指定的“命名空间”。

在Zend Framework 2.0.0使用了原生的PHP命名空间。

自动加载器除了能够指定任意回调以外,Zend Framework还定义了一个需要自动加载类实现的接口Zend_Loader_Autoloader_Interface:

interface Zend_Loader_Autoloader_Interface
{
  public function autoload($class);
}
登录后复制

如果您希望在Zend Framework中使用自定义的自动加载器,可以使用 Zend_Loader_Autoloader的 pushAutoloader()和unshiftAutoloader()方法。
通过这些方法将在Zend Framework的内部自动装载器之后追加或之前使用自定义的加载器。

每个方法接受一个可选的第二个参数,类的命名空间前缀。自动加载器只查找给定的类前缀。如果不是指定的类前缀,将跳过自动加载器 , 这可能是一种性能改进方式。

当使用这个接口时,你需要传递类实例到Zend_Loader_Autoloader类的pushAutoloader()和unshiftAutoloader()方法,具体如下:

// Append function 'my_autoloader' to the stack,
// to manage classes with the prefix 'My_':
$loader->pushAutoloader('my_autoloader', 'My_');
// Prepend static method Foo_Loader::autoload() to the stack,
// to manage classes with the prefix 'Foo_':
$loader->unshiftAutoloader(array('Foo_Loader', 'autoload'), 'Foo_');
// Assume Foo_Autoloader implements Zend_Loader_Autoloader_Interface:
$foo = new Foo_Autoloader();
$autoloader->pushAutoloader($foo, 'Foo_');
登录后复制


Zend_Loader_Autoloader的相关方法

Zend Framework教程之Autoloading用法详解

Zend Framework教程之Autoloading用法详解


希望本文所述对大家PHP程序设计有所帮助。

更多Zend Framework教程之Autoloading用法详解相关文章请关注PHP中文网!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在PHP中使用Zend Framework:快速入门指南 在PHP中使用Zend Framework:快速入门指南 Jun 21, 2023 am 08:58 AM

在PHP中使用ZendFramework:快速入门指南ZendFramework是一个开源的、基于PHP的Web应用程序框架,它是一个功能强大且易于扩展的框架。ZendFramework包含了许多好用的组件,这些组件可以帮助你构建高效的Web应用程序。本文将介绍如何在PHP中使用ZendFramework,帮助你快速入门。安装ZendFramewo

通过Zend Framework中间件实现高效的数据库查询 通过Zend Framework中间件实现高效的数据库查询 Jul 28, 2023 pm 01:13 PM

通过ZendFramework中间件实现高效的数据库查询引言在开发过程中,数据库查询是不可避免的一部分。一个高效的数据库查询可以大大提高系统的性能和用户体验。ZendFramework是一个使用广泛的PHP框架,拥有强大的数据库操作功能。本文将介绍如何通过ZendFramework中间件来实现高效的数据库查询,并提供相应的代码示例。一、了解ZendF

Zend Framework中间件:为应用程序添加OAuth和OpenID登录支持 Zend Framework中间件:为应用程序添加OAuth和OpenID登录支持 Jul 28, 2023 pm 01:09 PM

ZendFramework中间件:为应用程序添加OAuth和OpenID登录支持在当今的互联网应用程序中,用户认证是一个关键的功能。为了提供更好的用户体验和安全性,许多应用程序选择集成第三方登录服务,如OAuth和OpenID。在ZendFramework中,我们可以通过中间件来轻松地为应用程序添加OAuth和OpenID登录支持。首先,我们需要安装Ze

Zend Framework中间件:为Web应用程序添加社交登录功能 Zend Framework中间件:为Web应用程序添加社交登录功能 Jul 28, 2023 pm 07:21 PM

ZendFramework是一个基于PHP的开源框架,提供了许多功能强大的工具和组件,用于构建可扩展的Web应用程序。本文将介绍如何使用ZendFramework的中间件来为Web应用程序添加社交登录功能。中间件是一种在请求进入应用程序之前或之后执行的代码。它允许开发人员在处理请求的过程中进行定制和扩展。ZendFramework提供了一种灵活的方式来

Zend Framework中间件:为应用程序添加支付宝和微信支付功能 Zend Framework中间件:为应用程序添加支付宝和微信支付功能 Jul 28, 2023 pm 08:01 PM

ZendFramework中间件:为应用程序添加支付宝和微信支付功能引言:随着移动支付的普及,支付宝和微信支付已经成为了许多应用程序中必不可少的支付方式。本文将介绍如何使用ZendFramework中间件来为应用程序添加支付宝和微信支付功能。通过本文的学习,您将了解到如何使用中间件来简化支付流程,并且可以运用到您的实际项目当中。一、准备工作在开始之前,您

Zend Framework中间件:实现全文搜索和分页功能 Zend Framework中间件:实现全文搜索和分页功能 Jul 30, 2023 pm 08:49 PM

ZendFramework是一个功能强大的开发框架,可以帮助开发人员快速构建高性能、可扩展的PHP应用程序。其中,中间件是ZendFramework中的一个重要概念,它可以帮助我们实现全文搜索和分页功能。本文将介绍如何在ZendFramework中使用中间件来实现这两个功能,并提供代码示例。一、全文搜索功能全文搜索是现代应用程序中常见的功能之一。

CodeIgniter vs Zend Framework:哪个框架更适合开发ERP系统? CodeIgniter vs Zend Framework:哪个框架更适合开发ERP系统? Jun 19, 2023 am 08:53 AM

当你决定开发ERP系统时,选择一个适合的框架是至关重要的。这里我们将比较CodeIgniter和ZendFramework这两个PHP框架,帮助你找到更适合你的ERP系统开发的框架。CodeIgniter和ZendFramework是颇受欢迎的PHP框架。它们都提供了许多功能,并具有扩展性和可维护性。然而,这两个框架在某些方面存在明显不同,更适合于某些应

PHP编程中有哪些常见的Zend Framework 2操作? PHP编程中有哪些常见的Zend Framework 2操作? Jun 12, 2023 am 09:01 AM

ZendFramework2是一种流行的PHP编程框架,它提供了丰富的功能和模块,使PHP开发者们可以更加便捷地构建高质量的Web应用程序。本文将介绍一些常见的ZendFramework2操作,助您更好地使用这个框架。MVC模式在ZendFramework2中,Model-View-Controller(MVC)模式是最常见的架构。MVC模式是一

See all articles