搜尋
首頁後端開發php教程PHP 5.3新增魔術方法__invoke概述

PHP自從5.3版以來就新增了一個叫做__invoke的魔術方法,使用該方法就可以在創建實例後,直接調用物件。如下例所示:

class testClass
{
public function __invoke
{
print "hello world";
}
}
$n = new testClass;
$n();

   

執行結果為:

hello world。

   

php:PH

php中的類別就可以使用魔術方法了。其規定以兩個底線(__)開頭的方法都保留為魔術方法,所以建議大家函數名最好不用__開頭,除非是為了重載已有的魔術方法。

The function names __construct, __destruct, __call, __callStatic, __get, __set, __isset, __unset, __sleep, __wakeup, __toString, __invoke, __set_state and__clone class akeup, __toString, __invoke, __set_state and__clone class akeup. es unless you want the magic functionality associated with them.

如下這兩個方法是為在類別和他們的父類中沒有聲明的屬性而設計的。

__get($property)當呼叫一個未定義的屬性時,此方法會被觸發,傳遞的參數是被存取的屬性名稱。

__set($property,$value)給予一個未定義的屬性賦值時,此方法會被觸發,傳遞的參數是被設定的屬性名稱和值。

這裡的沒有聲明包括當使用物件呼叫時,存取控制為proteced,private的屬性(即沒有權限存取的屬性)。

與__get方法和__set方法相同,這裡的沒有聲明包括當使用物件呼叫時,存取控制為proteced,private的屬性(即沒有權限存取的屬性)。

這裡的未定義的方法包括沒有權限訪問的方法;如果方法不存在就去父類中找這個方法,如果父類中也不存在就去調用本類的__call()方法,如果本類中不存在__call()方法就去找父類別的__call()方法。

__autoload函數,它會在試圖使用尚未定義的類別時自動呼叫。透過呼叫此函數,腳本引擎在php出錯失敗前有了最後一個機會載入所需的類別。

注意:在__autoload函數中拋出的異常不能被catch語句塊捕獲並導致致命錯誤,所以應該在函數本身做捕獲。

__construct構造方法,當一個物件創建時調用此方法,相對於php4使用此方法的好處是:可以使構造方法有一個獨一無二的名稱,無論它所在的類的名稱是什麼.這樣你在改變類的名稱時,就不需要改變構造方法的名稱。

__destruct析構方法,php將在物件被銷毀前(即從記憶體中清除前)呼叫這個方法。預設,php僅釋放物件屬性所佔用的記憶體並銷毀物件相關的資源,析構函數允許你在使用一個物件之後執行任意程式碼來清除記憶體。當php決定你的腳本不再與物件相關時,析構函數將被呼叫。

在一個函數的命名空間內,這會發生在函數return的時候。對於全域變數,這發生於腳本結束的時候。如果你想明確地銷毀一個物件,你可以給指向該物件的變數分配任何其它值.通常將變數賦值為null或呼叫unset。

php5中的物件賦值是使用的引用賦值,如果想複製一個物件則需要使用clone方法,在呼叫此方法是物件會自動呼叫__clone魔術方法,如果在物件複製需要執行某些初始化操作,可以在__clone方法實現。

__tostring方法在將一個物件轉換成字串時自動調用,例如使用echo列印物件時。

在php5.2.0之前,__tostring方法只有結合使用echo()或print()時才能生效。 php5.2.0之後,則可以在任何字串環境生效(例如透過printf(),使用%s修飾符),但不能用於非字串環境(如使用%d修飾符)。從php5.2.0,如果將一個未定義__tostring方法的物件轉換為字串,會報出一個e_recoverable_error錯誤。

__wakeup反串列化的時候呼叫

serialize()檢查類別中是否有魔術名稱__sleep的函數。如果這樣,函數將在任何序列化之前運行。它可以清除物件並應該傳回一個包含有該物件中應被序列化的所有變數名的陣列。

使用__sleep的目的是關閉物件可能具有的任何資料庫連接,提交等待中的資料或進行類似的清除任務。此外,如果有非常大的物件而並不需要完全儲存下來時此函數也很有用。

PHP相反地,unserialize()檢查具有魔術名稱__wakeup的函數的存在。如果存在,此函數可以重建物件可能具有的任何資源。使用__wakeup的目的是重建在序列化中可能丟失的任何資料庫連接以及處理其它重新初始化的任務。

當嘗試以呼叫函數的方式呼叫一個物件時,__invoke方法會被自動呼叫。

它的工作方式類似於__call()魔術方法,__callstatic()是為了處理靜態方法呼叫。

php確實加強了對__callstatic()方法的定義;它必須是公共的,並且必須被宣告為靜態的。同樣,__call()魔術方法必須被定義為公共的,所有其他魔術方法都必須如此。

更多PHP 5.3新增魔術方法__invoke概述相關文章請關注PHP中文網!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
簡單地說明PHP會話的概念。簡單地說明PHP會話的概念。Apr 26, 2025 am 12:09 AM

phpsessionstrackuserdataacrossmultiplepagerequestsusingauniqueIdStoredInAcookie.here'showtomanageThemeffectionaly:1)startAsessionWithSessionWwithSession_start()和stordoredAtain $ _session.2)

您如何循環中存儲在PHP會話中的所有值?您如何循環中存儲在PHP會話中的所有值?Apr 26, 2025 am 12:06 AM

在PHP中,遍歷會話數據可以通過以下步驟實現:1.使用session_start()啟動會話。 2.通過foreach循環遍歷$_SESSION數組中的所有鍵值對。 3.處理複雜數據結構時,使用is_array()或is_object()函數,並用print_r()輸出詳細信息。 4.優化遍歷時,可採用分頁處理,避免一次性處理大量數據。這將幫助你在實際項目中更有效地管理和使用PHP會話數據。

說明如何使用會話進行用戶身份驗證。說明如何使用會話進行用戶身份驗證。Apr 26, 2025 am 12:04 AM

會話通過服務器端的狀態管理機制實現用戶認證。 1)會話創建並生成唯一ID,2)ID通過cookies傳遞,3)服務器存儲並通過ID訪問會話數據,4)實現用戶認證和狀態管理,提升應用安全性和用戶體驗。

舉一個如何在PHP會話中存儲用戶名的示例。舉一個如何在PHP會話中存儲用戶名的示例。Apr 26, 2025 am 12:03 AM

Tostoreauser'snameinaPHPsession,startthesessionwithsession_start(),thenassignthenameto$_SESSION['username'].1)Usesession_start()toinitializethesession.2)Assigntheuser'snameto$_SESSION['username'].Thisallowsyoutoaccessthenameacrossmultiplepages,enhanc

哪些常見問題會導致PHP會話失敗?哪些常見問題會導致PHP會話失敗?Apr 25, 2025 am 12:16 AM

PHPSession失效的原因包括配置錯誤、Cookie問題和Session過期。 1.配置錯誤:檢查並設置正確的session.save_path。 2.Cookie問題:確保Cookie設置正確。 3.Session過期:調整session.gc_maxlifetime值以延長會話時間。

您如何在PHP中調試與會話相關的問題?您如何在PHP中調試與會話相關的問題?Apr 25, 2025 am 12:12 AM

在PHP中調試會話問題的方法包括:1.檢查會話是否正確啟動;2.驗證會話ID的傳遞;3.檢查會話數據的存儲和讀取;4.查看服務器配置。通過輸出會話ID和數據、查看會話文件內容等方法,可以有效診斷和解決會話相關的問題。

如果session_start()被多次調用會發生什麼?如果session_start()被多次調用會發生什麼?Apr 25, 2025 am 12:06 AM

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

您如何在PHP中配置會話壽命?您如何在PHP中配置會話壽命?Apr 25, 2025 am 12:05 AM

在PHP中配置會話生命週期可以通過設置session.gc_maxlifetime和session.cookie_lifetime來實現。 1)session.gc_maxlifetime控制服務器端會話數據的存活時間,2)session.cookie_lifetime控制客戶端cookie的生命週期,設置為0時cookie在瀏覽器關閉時過期。

See all articles

熱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

好用且免費的程式碼編輯器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器