Maison développement back-end tutoriel php Zend Framework教程之Autoloading用法详解_php实例

Zend Framework教程之Autoloading用法详解_php实例

Jun 07, 2016 pm 05:08 PM
framework zend

本文实例讲述了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();

Copier après la connexion

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

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

Copier après la connexion

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

$loader->setFallbackAutoloader(true);

Copier après la connexion

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

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

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

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

$autoloader->suppressNotFoundWarnings(true);

Copier après la connexion

选择一个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');

Copier après la connexion
$autoloader->setZfPath($path, '1.8');

Copier après la connexion
$autoloader->setZfPath($path, '1.7.7');

Copier après la connexion

也可以使用配置文件

[production]
autoloaderZfPath = "path/to/ZendFramework"
autoloaderZfVersion = "1.7.7"
[qa]
autoloaderZfVersion = "1.8"
[development]
autoloaderZfVersion = "latest"

Copier après la connexion

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);
}

Copier après la connexion

如果您希望在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_');

Copier après la connexion

Zend_Loader_Autoloader的相关方法

Method Return Value Parameters Description
getInstance() Zend_Loader_Autoloader N/A

获取实例

resetInstance() <font color="#000000" face="NSimsun">void</font> N/A

重置Zend_Loader_Autoloadersingleton实例的状态,恢复它的原始状态,注销所有的自动加载器回调和所有注册的命名空间。

autoload($class) <font color="#000000"><font face="NSimsun">string|<strong><tt>FALSE</tt></strong></font></font>
  • $class,required. A string class name to load.

试图加载一个类。

setDefaultAutoloader($callback) Zend_Loader_Autoloader
  • $callback,required.

指定默认的加载器回调

getDefaultAutoloader() <font color="#000000" face="NSimsun">callback</font> N/A

获取默认的加载器接口;默认是Zend_Loader::loadClass().

setAutoloaders(array $autoloaders) Zend_Loader_Autoloader
  • $autoloaders,required.

设置在自动加载器栈使用具体的自动加载器列表。自动加载器列表中的每个项目必须是PHPcallback。

getAutoloaders() Array N/A

 

getNamespaceAutoloaders($namespace) Array
  • $namespace,required

获取所有已注册的自动加载器来加载一个特定的的命名空间。

registerNamespace($namespace) Zend_Loader_Autoloader
  • $namespace,required.

注册命名空间. If$namespace is a string, it registers that namespace; if it's an array of strings, registers each as a namespace.

unregisterNamespace($namespace) Zend_Loader_Autoloader
  • $namespace,required.


getRegisteredNamespaces() Array N/A


suppressNotFoundWarnings($flag = null) <font color="#000000" face="NSimsun">boolean|Zend_Loader_Autoloader</font>
  • $flag,optional.

错误提示

setFallbackAutoloader($flag) Zend_Loader_Autoloader
  • $flag,required.

 

isFallbackAutoloader() Boolean N/A

 

getClassAutoloaders($class) Array
  • $class,required.

 

unshiftAutoloader($callback, $namespace = '') Zend_Loader_Autoloader
  • $callback,required. A valid PHPcallback

  • $namespace,optional. A string representing a class prefix namespace.

 

pushAutoloader($callback, $namespace = '') Zend_Loader_Autoloader
  • $callback,required. A valid PHPcallback

  • $namespace,optional. A string representing a class prefix namespace.

 

removeAutoloader($callback, $namespace = '') Zend_Loader_Autoloader
  • $callback,required. A valid PHPcallback

  • $namespace,optional. A string representing a class prefix namespace, or an array of namespace strings.


更多关于zend相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

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

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Problèmes d'installation de Microsoft NET Framework, code d'erreur 0x800c0006, correctif Problèmes d'installation de Microsoft NET Framework, code d'erreur 0x800c0006, correctif May 05, 2023 pm 04:01 PM

.NET Framework 4 est requis par les développeurs et les utilisateurs finaux pour exécuter les dernières versions des applications sous Windows. Cependant, lors du téléchargement et de l'installation de .NET Framework 4, de nombreux utilisateurs se sont plaints de l'arrêt du programme d'installation à mi-chemin, affichant le message d'erreur suivant : « .NET Framework 4 n'a pas été installé car le téléchargement a échoué avec le code d'erreur 0x800c0006 ». Si vous le rencontrez également lors de l'installation de .NETFramework4 sur votre appareil, vous êtes au bon endroit

Comment identifier les problèmes de mise à niveau de Windows à l'aide de SetupDiag sous Windows 11/10 Comment identifier les problèmes de mise à niveau de Windows à l'aide de SetupDiag sous Windows 11/10 Apr 17, 2023 am 10:07 AM

Chaque fois que votre PC Windows 11 ou Windows 10 rencontre un problème de mise à niveau ou de mise à jour, vous verrez généralement un code d'erreur indiquant la raison réelle de l'échec. Cependant, une confusion peut parfois survenir lorsqu'une mise à niveau ou une mise à jour échoue sans qu'un code d'erreur ne s'affiche. Grâce à des codes d'erreur pratiques, vous savez exactement où se situe le problème afin que vous puissiez essayer de le résoudre. Mais comme aucun code d’erreur n’apparaît, il devient difficile d’identifier le problème et de le résoudre. Cela prendra beaucoup de temps pour simplement découvrir la raison de l'erreur. Dans ce cas, vous pouvez essayer d'utiliser un outil dédié appelé SetupDiag fourni par Microsoft qui vous aide à identifier facilement la véritable raison de l'erreur.

SCNotification a cessé de fonctionner [5 étapes pour y remédier] SCNotification a cessé de fonctionner [5 étapes pour y remédier] May 17, 2023 pm 09:35 PM

En tant qu'utilisateur Windows, vous rencontrerez probablement une erreur SCNotification a cessé de fonctionner à chaque démarrage de votre ordinateur. SCNotification.exe est un fichier de notification système Microsoft qui plante à chaque démarrage de votre PC en raison d'erreurs d'autorisation et de pannes de réseau. Cette erreur est également connue sous son nom d’événement problématique. Vous ne verrez donc peut-être pas cela comme un arrêt de SCNotification, mais comme un bug clr20r3. Dans cet article, nous explorerons toutes les étapes à suivre pour réparer SCNotification a cessé de fonctionner afin qu'il ne vous dérange plus. Qu'est-ce que SCNotification.e

Microsoft .NET Framework 4.5.2, 4.6 et 4.6.1 cessera de prendre en charge en avril 2022 Microsoft .NET Framework 4.5.2, 4.6 et 4.6.1 cessera de prendre en charge en avril 2022 Apr 17, 2023 pm 02:25 PM

Les utilisateurs de Microsoft Windows qui ont installé Microsoft.NET version 4.5.2, 4.6 ou 4.6.1 doivent installer une version plus récente de Microsoft Framework s'ils souhaitent que Microsoft prenne en charge le framework via de futures mises à jour de produit. Selon Microsoft, les trois frameworks cesseront de prendre en charge le 26 avril 2022. Une fois la date de support terminée, le produit ne recevra plus de « correctifs de sécurité ni de support technique ». La plupart des appareils domestiques sont tenus à jour grâce aux mises à jour Windows. Ces appareils disposent déjà de versions plus récentes de frameworks, telles que .NET Framework 4.8. Les appareils qui ne se mettent pas à jour automatiquement peuvent

KB5012643 pour Windows 11 interrompt les applications .NET Framework 3.5 KB5012643 pour Windows 11 interrompt les applications .NET Framework 3.5 May 09, 2023 pm 01:07 PM

Cela fait une semaine que nous parlions du nouveau bug du mode sans échec affectant les utilisateurs ayant installé KB5012643 pour Windows 11. Ce problème embêtant n'apparaissait pas sur la liste des problèmes connus publiée par Microsoft le jour du lancement, prenant ainsi tout le monde par surprise. Eh bien, juste au moment où vous pensiez que les choses ne pourraient pas empirer, Microsoft lâche une autre bombe pour les utilisateurs qui ont installé cette mise à jour cumulative. Windows 11 Build 22000.652 pose davantage de problèmes. La société de technologie avertit donc les utilisateurs de Windows 11 qu'ils pourraient rencontrer des problèmes lors du lancement et de l'utilisation de certaines applications .NET Framework 3.5. Cela vous semble familier ? Mais s'il te plaît, ne sois pas surpris

Comment utiliser l'ACL (Access Control List) pour le contrôle des autorisations dans Zend Framework Comment utiliser l'ACL (Access Control List) pour le contrôle des autorisations dans Zend Framework Jul 29, 2023 am 09:24 AM

Comment utiliser l'ACL (AccessControlList) pour le contrôle des autorisations dans Zend Framework Introduction : Dans une application Web, le contrôle des autorisations est une fonction cruciale. Il garantit que les utilisateurs ne peuvent accéder qu'aux pages et fonctionnalités auxquelles ils sont autorisés à accéder et empêche tout accès non autorisé. Le framework Zend fournit un moyen pratique d'implémenter le contrôle des autorisations, en utilisant le composant ACL (AccessControlList). Cet article explique comment utiliser l'ACL dans Zend Framework.

Framework d'implémentation PHP : Tutoriel de mise en route de Zend Framework Framework d'implémentation PHP : Tutoriel de mise en route de Zend Framework Jun 19, 2023 am 08:09 AM

Framework d'implémentation PHP : tutoriel d'introduction à ZendFramework ZendFramework est un framework de site Web open source développé par PHP et actuellement maintenu par ZendTechnologies. ZendFramework adopte le modèle de conception MVC et fournit une série de bibliothèques de code réutilisables pour servir l'implémentation d'applications Web2.0 et Web Serve. ZendFramework est très populaire et respecté par les développeurs PHP et propose une large gamme de

Cooler Master et Framework lancent un mini kit de boîtier innovant, compatible avec les cartes mères d'ordinateurs portables Cooler Master et Framework lancent un mini kit de boîtier innovant, compatible avec les cartes mères d'ordinateurs portables Dec 15, 2023 pm 05:35 PM

Selon les informations du 9 décembre, Cooler Master a récemment présenté un mini kit de châssis en coopération avec le fournisseur de solutions modulaires pour ordinateurs portables Framework lors d'un événement de démonstration au Taipei Compute Show. La particularité de ce kit est qu'il peut être compatible et installer la carte mère. à partir du cahier-cadre. Actuellement, ce produit a commencé à être vendu sur le marché, au prix de 39 dollars américains, ce qui équivaut à environ 279 yuans au taux de change actuel. Le numéro de modèle de ce kit de châssis est nommé « frameWORKMAINBOARDCASE ». En termes de design, il incarne le summum de la compacité et de la praticité, mesurant seulement 297x133x15 mm. Sa conception originale est de pouvoir se connecter de manière transparente aux notebooks framework

See all articles