Zend Framework教學之Autoloading用法詳解
本文實例講述了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/
$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介面🎜🎜注在該版本中,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的相关方法
希望本文所述对大家PHP程序设计有所帮助。
更多Zend Framework教程之Autoloading用法详解相关文章请关注PHP中文网!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

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

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

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

ZendFramework中間件:為應用程式新增OAuth和OpenID登入支援在現今的網際網路應用程式中,使用者認證是一個關鍵的功能。為了提供更好的使用者體驗和安全性,許多應用程式選擇整合第三方登入服務,如OAuth和OpenID。在ZendFramework中,我們可以透過中間件來輕鬆為應用程式新增OAuth和OpenID登入支援。首先,我們要安裝Ze

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

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

ZendFramework中間件:為應用程式添加支付寶和微信支付功能引言:隨著行動支付的普及,支付寶和微信支付已經成為了許多應用程式中必不可少的支付方式。本文將介紹如何使用ZendFramework中間件來為應用程式新增支付寶和微信支付功能。透過本文的學習,您將了解如何使用中間件來簡化支付流程,並且可以運用到您的實際專案當中。一、準備工作在開始前,您

當你決定要發展ERP系統時,選擇一個適合的框架是至關重要的。這裡我們將比較CodeIgniter和ZendFramework這兩個PHP框架,幫助你找到更適合你的ERP系統所開發的框架。 CodeIgniter和ZendFramework是頗受歡迎的PHP框架。它們都提供了許多功能,並具有擴展性和可維護性。然而,這兩個框架在某些方面存在明顯不同,更適合於某些應
