首頁 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/
選擇一個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/
| /
|-- 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介面

注:命名空間前綴和PHreee

Autoloader介面

🎜注:命名空間前綴和PHreee🎜Autoloader介面🎜🎜注在該版本中,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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 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)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1327
25
PHP教程
1273
29
C# 教程
1252
24
在PHP中使用Zend Framework:快速入門指南 在PHP中使用Zend Framework:快速入門指南 Jun 21, 2023 am 08:58 AM

在PHP中使用ZendFramework:快速入門指南ZendFramework是一個開源的、基於PHP的Web應用程式框架,它是一個強大且易於擴展的框架。 ZendFramework包含了許多好用的元件,這些元件可以幫助你建立高效能的網路應用程式。本文將介紹如何在PHP中使用ZendFramework,幫助你快速入門。安裝ZendFramewo

透過Zend Framework中介軟體實現高效的資料庫查詢 透過Zend Framework中介軟體實現高效的資料庫查詢 Jul 28, 2023 pm 01:13 PM

透過ZendFramework中間件實現高效率的資料庫查詢引言在開發過程中,資料庫查詢是不可避免的一部分。一個高效率的資料庫查詢可以大大提高系統的效能和使用者體驗。 ZendFramework是一個使用廣泛的PHP框架,具有強大的資料庫操作功能。本文將介紹如何透過ZendFramework中間件來實現高效的資料庫查詢,並提供對應的程式碼範例。一、了解ZendF

Zend Framework中間件:實現全文搜尋與分頁功能 Zend Framework中間件:實現全文搜尋與分頁功能 Jul 30, 2023 pm 08:49 PM

ZendFramework是一個功能強大的開發框架,可以幫助開發人員快速建立高效能、可擴展的PHP應用程式。其中,中間件是ZendFramework中的重要概念,它可以幫助我們實現全文搜尋和分頁功能。本文將介紹如何在ZendFramework中使用中間件來實作這兩個功能,並提供程式碼範例。一、全文搜尋功能全文搜尋是現代應用程式中常見的功能之一。

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中間件:提供郵件通知與訊息推播的功能 Zend Framework中間件:提供郵件通知與訊息推播的功能 Jul 29, 2023 pm 08:29 PM

ZendFramework中間件:提供郵件通知和訊息推播的功能引言:隨著網路的發展和智慧型手機的普及,郵件通知和訊息推播已經成為了現代軟體開發中常用的功能之一。在ZendFramework中,我們可以使用中間件來實作郵件通知和訊息推播的功能。本文將介紹如何利用ZendFramework中間件來實作郵件通知和訊息推播,並提供對應的程式碼範例。一、準備工作在

Zend Framework中間件:為網路應用程式新增社交登入功能 Zend Framework中間件:為網路應用程式新增社交登入功能 Jul 28, 2023 pm 07:21 PM

ZendFramework是一個基於PHP的開源框架,提供了許多功能強大的工具和元件,用於建立可擴展的網路應用程式。本文將介紹如何使用ZendFramework的中間件來為Web應用程式新增社群登入功能。中間件是一種在請求進入應用程式之前或之後執行的程式碼。它允許開發人員在處理請求的過程中進行自訂和擴展。 ZendFramework提供了一個靈活的方式來

Zend Framework中間件:為應用程式新增支付寶和微信支付功能 Zend Framework中間件:為應用程式新增支付寶和微信支付功能 Jul 28, 2023 pm 08:01 PM

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框架。它們都提供了許多功能,並具有擴展性和可維護性。然而,這兩個框架在某些方面存在明顯不同,更適合於某些應

See all articles