首頁 後端開發 php教程 PHP自動載入機制介紹-spl_autoload_register()函數,php類別自動載入

PHP自動載入機制介紹-spl_autoload_register()函數,php類別自動載入

Oct 14, 2019 pm 06:10 PM
類別 自動載入

* include 和 require 功能是一樣的,它們的不同在於 include 出錯時只會產生警告,而 require 會拋出錯誤終止腳本。

* include_once 和 include 唯一的區別在於 include_once 會檢查檔案是否已引入,如果是則不會重複引入。

spl_autoload_register() 函數是實現自動載入未定義類別功能的重要方法,所謂的自動載入意思是我們的new 一個類別的時候必須先include或require的類別文件,如果沒有include或require ,則會報錯。那這樣我們就必須在文件頭寫上許多include或require文件,非常麻煩,

為了使得沒有include或require類的時候也正常new一個類,所以有了自動載入的概念,也是說new一個類別之前不用事先包含類別檔案也可以正常new,這樣我們的檔案頭部就不用包含許多include(require)。其實這算一種封裝!

用spl_autoload_register函數可以實作上面說的功能,我們來看看實作原理。

這個函數的參數如下:

#第一個參數:autoload_function

這是一個函數【方法】名稱,可以是字串或陣列(呼叫類別方法使用)。這個函數(方法)的功能就是,來把需要new 的類別檔案包含include(requeire)進來,這樣new的時候就不會找不到檔案了。其實就是封裝整個專案的include和require功能。

第二個參數:throw

此參數設定了 autoload_function 無法成功註冊時, spl_autoload_register()是否拋出例外。

第三個參數:prepend

如果是 true,spl_autoload_register() 會新增函數到佇列之首,而不是佇列尾端。

當我們new一個類,而這個類別文件沒有被包含時候就會執行這個autoload_function方法

先來看一個錯誤例子:

<?php
//当我们直接new一个未包含class类文件时候会报错
$objDemo = new AutoloadClass();
登入後複製

正確的使用spl_autoload_register() 函數

透過下面例子我們可以看到,當new一個未包含的類別時候,會去執行spl_autoload_register第一個參數函數名稱的函數,這個函數有一個參數就是需要new的類別名,這個函數的功能就是把這個類別給包含進來(類別名稱和檔案名稱一致),這樣就實作了自動載入功能。原理就是這樣,不是很複雜。

<?php
// 定义工具类在服务器位置 常量
define(&#39;TOOLS_ROOT&#39;, __DIR__ . &#39;/&#39;);
 
//文件 autoloadClass.php ,需要new的文件
class AutoloadClass{
 
    public function __construct()
    {
        // echo &#39;你已经包含我了&#39;;
    }
}
//文件autoloadDemo.php文件
spl_autoload_register(&#39;myAutoLoad&#39;, true, true);
function myAutoLoad($className){
    $classFileName = TOOLS_ROOT."{$className}.php";
    include $classFileName;
}
登入後複製

另外,我們可以改為匿名函數來實現:

<?php
 
// 定义工具类在服务器位置 常量
define(&#39;TOOLS_ROOT&#39;, __DIR__ . &#39;/&#39;);
 
//文件 autoloadClass.php ,需要new的文件
class AutoloadClass{
 
    public function __construct()
    {
        // echo &#39;你已经包含我了&#39;;
    }
}
spl_autoload_register(function ($className)
{
    $classFileName = TOOLS_ROOT."{$className}.php";
    include $classFileName;
}, true, true);
$objDemo = new AutoloadClass();
登入後複製

 更多PHP相關知識,請訪問PHP中文網

以上是PHP自動載入機制介紹-spl_autoload_register()函數,php類別自動載入的詳細內容。更多資訊請關注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

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

熱工具

記事本++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報錯:無法重複聲明類,解決方法! PHP報錯:無法重複聲明類,解決方法! Aug 25, 2023 pm 04:13 PM

PHP報錯:無法重複聲明類,解決方法!對開發者而言,遇到問題是常有的事情。而在PHP開發中,常會遇到一個常見的錯誤:無法重複聲明類別。這個問題看似簡單,但如果不及時解決,會導致程式碼無法正確執行。本文將介紹這個問題的原因,並提供解決方法,以供參考。當我們在PHP程式碼中定義一個類別時,如果在同一個檔案或多個檔案中多次定義同一個類,就會出現無法重複聲明類別的錯誤。這是

PHP中的命名規格:如何使用駝峰命名法命名類別、方法和變量 PHP中的命名規格:如何使用駝峰命名法命名類別、方法和變量 Jul 30, 2023 pm 02:43 PM

PHP中的命名規範:如何使用駝峰命名法命名類別、方法和變數在PHP程式設計中,良好的命名規範是一種重要的編碼實踐。它可以提高程式碼的可讀性和可維護性,並且使團隊合作更加順暢。在本文中,我們將探討一個常見的命名規格:駝峰命名法,並提供一些範例來說明如何在PHP中使用它來命名類別、方法和變數。一、什麼是駝峰命名法?駝峰命名法是一種常用的命名約定,其中每個單字的首字母大寫,

PHP中的封裝技術及應用 PHP中的封裝技術及應用 Oct 12, 2023 pm 01:43 PM

PHP中的封裝技術及應用封裝是物件導向程式設計中的重要概念,它指的是將資料和資料的操作封裝在一起,以便提供對外部程式的統一存取介面。在PHP中,封裝可以透過存取控制修飾符和類別的定義來實現。本文將介紹PHP中的封裝技術及其應用場景,並提供一些具體的程式碼範例。一、封裝的存取控制修飾符在PHP中,封裝主要透過存取控制修飾符來實現。 PHP提供了三個存取控制修飾符,

'PHP物件導向程式設計入門:從概念到實踐” 'PHP物件導向程式設計入門:從概念到實踐” Feb 25, 2024 pm 09:04 PM

什麼是物件導向程式設計?物件導向程式設計(OOP)是一種程式設計範式,它將現實世界中的實體抽象化為類,並使用物件來表示這些實體。類別定義了物件的屬性和行為,而物件則實例化了類別。 OOP的主要優點在於它可以使程式碼更易於理解、維護和重複使用。 OOP的基本概念OOP的主要概念包括類別、物件、屬性和方法。類別是物件的藍圖,它定義了物件的屬性和行為。物件是類別的實例,它具有類別的所有屬性和行為。屬性是物件的特徵,它可以儲存資料。方法是物件的函數,它可以對物件的資料進行操作。 OOP的優點OOP的主要優點包括:可重複使用性:OOP可以讓程式碼更

PHP中的自動載入機制 PHP中的自動載入機制 Jun 18, 2023 pm 01:11 PM

隨著PHP語言越來越受歡迎,開發人員需要使用越來越多的類別和函數。當專案規模擴大時,手動引入所有依賴項將變得不切實際。這時候就需要一種自動載入機制來簡化程式碼開發和維護過程。自動載入機制是一種PHP語言的特性,可以在運行時自動載入所需的類別和接口,並減少手動的類別文件引入。這樣,程式設計師可以專注於開發程式碼,減少因繁瑣的手動類別引入而產生的錯誤和時間浪費。在PHP中,一般

Java中找不到類別-java.lang.ClassNotFoundException如何解決? Java中找不到類別-java.lang.ClassNotFoundException如何解決? Jun 25, 2023 am 10:37 AM

在Java開發過程中,有時候會遇到一個錯誤:java.lang.ClassNotFoundException。它表示在Java虛擬機器(JVM)中找不到所需的類別檔案。這個錯誤會導致程式不能正常運行,如果不及時解決,會延誤開發進度。本文將介紹Java中找不到類別的原因和解決方法。一、原因1.類別的路徑錯誤在Java中,包路徑和類別路徑很重要。如果類路徑設定錯誤或類文

PHP8中如何使用Attributes為類別添加自訂註解? PHP8中如何使用Attributes為類別添加自訂註解? Oct 18, 2023 am 10:16 AM

PHP8中如何使用Attributes為類別添加自訂註解?自訂註解是一種在類別或方法上添加元資料的方式,它可以幫助我們在運行時獲取和處理特定的類別或方法上的附加資訊。在PHP8中,引入了Attributes的概念,它使我們可以輕鬆地為類別添加自訂註解。本文將介紹如何在PHP8中使用Attributes來實作類別的自訂註解,並提供具體的程式碼範例。在PHP8中,自

淺析PHP中的類別自動載入相關文件 淺析PHP中的類別自動載入相關文件 Dec 29, 2022 pm 04:37 PM

這篇文章為大家帶來了關於PHP的相關知識,其中主要介紹了類自動加載的相關內容,下面帶大家一起來分析下PHP中類自動加載相關文件,希望對大家有幫助。

See all articles