搜尋
首頁後端開發PHP問題php下劃線是什麼意思

php下劃線是什麼意思

Jan 19, 2022 am 09:47 AM
php底線

php中一個底線表示的是私有變數以及私有方法,兩個底線是PHP內建變量,例如php規定以兩個底線開頭的方法都保留為魔術方法,所以建議大家函數名稱最好不用__開頭,除非是為了重載已有的魔術方法。

php下劃線是什麼意思

本文操作環境:Windows7系統、PHP7.1版、DELL G3電腦

php底線是什麼意思?

PHP中以底線開頭的變數意義

命名的規則 

  加一個為私有的

  加兩個一般都是系統預設的,系統預先定義的,即所謂:

=====================

「魔術方法」與「魔術常數”

=====================

★PHP起止為雙底線的常數即為「魔術常數」:

__LINE__檔案中的目前行號。

__FILE__檔案的完整路徑和檔案名稱。

__DIR__檔案所在的目錄。如果用在被包含檔案中,則傳回被包含的檔案所在的目錄。它等價於 dirname(__FILE__)。除非是根目錄,否則目錄中名不包括末尾的斜杠

註:以上內容來自“PHP中文手冊->語言參考->常數->魔術常數”。

從php5以後的版本,php的類別就可以使用魔術方法了。

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

PHP中的魔術方法有:__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone, __sleep, __wakeup, __toString, __set_state, __clone, __sleep, __#、#au#n# __set

這兩個方法是為在類別和他們的父類別中沒有宣告的屬性而設計的

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

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

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

2、__isset、__unset

__isset( $property ) 當在未定義的屬性上呼叫isset()函數時呼叫此方法

__unset( $property )當在一個未定義的屬性上呼叫unset()函數時呼叫此方法

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

3、__call

__call( $method, $arg_array ) 當呼叫未定義的方法是呼叫此方法

#這裡的未定義的方法包括沒有權限存取的方法;如果方法不存在就去父類別中找這個方法,如果父類別中也不存在就去呼叫本類的__call()方?法,如果本類中不存在__call()方法就去找父類別中的__call()方法

4、__autoload

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

如果要定義一個全域的自動載入類,則必須用spl_autoload_register()方法將處理類別註冊到PHP標準庫:

<?php  
class Loader  
{  
static function autoload_class($class_name)  
{  
//寻找正确的$class_name类,并引入,没有则抛出异常  
}  
}  
  
/** 
*  设置对象的自动载入 
*  spl_autoload_register — Register given function as __autoload() implementation 
*/  
spl_autoload_register(array(&#39;Loader&#39;, &#39;autoload_class&#39;));  
  
$a = new Test();//Test没用require就实例化,实现自动加载,很多框架就用这种方法自动加载类  
  
?>

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

5、__construct、__destruct

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

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

在一個函數的命名空間內,這會發生在函數return的時候。

對於全域變數,這發生於腳本結束的時候。

如果你想明確地銷毀一個物件,你可以給指向該物件的變數分配任何其它值.通常將變數賦值勤為NULL或是呼叫unset.

6、__clone

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

7、__toString

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

如果類別沒有實現此方法,則無法透過echo列印對象,否則會顯示:Catchable fatal error: Object of class test could not be converted to string in

#此方法必須傳回字串。

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

8、__sleep、__wakeup

__sleep 串列化的時候用

__wakeup 反串列化的時候呼叫

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

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

相反地,unserialize() 檢查具有魔術名稱 __wakeup 的函數的存在。如果存在,此函數可以重建物件可能具有的任何資源。

使用 __wakeup 的目的是重建在序列化中可能丟失的任何資料庫連接以及處理其它重新初始化的任務。

9、__set_state

當呼叫var_export()時,這個靜態 方法會被呼叫(自PHP 5.1.0起有效)。

本方法的唯一參數是一個數組,其中包含按array(’property’ => value, …)格式排列的類別屬性。

10、__invoke

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

PHP5.3.0以上版本有效

11、__callStatic

它的運作方式類似於__call() 魔術方法,__callStatic() 是為了處理靜態方法調用,

PHP5.3.0以上版本有效

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

推薦學習:《PHP影片教學

以上是php下劃線是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
酸與基本數據庫:差異和何時使用。酸與基本數據庫:差異和何時使用。Mar 26, 2025 pm 04:19 PM

本文比較了酸和基本數據庫模型,詳細介紹了它們的特徵和適當的用例。酸優先確定數據完整性和一致性,適合財務和電子商務應用程序,而基礎則側重於可用性和

PHP安全文件上傳:防止與文件相關的漏洞。PHP安全文件上傳:防止與文件相關的漏洞。Mar 26, 2025 pm 04:18 PM

本文討論了確保PHP文件上傳的確保,以防止諸如代碼注入之類的漏洞。它專注於文件類型驗證,安全存儲和錯誤處理以增強應用程序安全性。

PHP輸入驗證:最佳實踐。PHP輸入驗證:最佳實踐。Mar 26, 2025 pm 04:17 PM

文章討論了PHP輸入驗證以增強安全性的最佳實踐,重點是使用內置功能,白名單方法和服務器端驗證等技術。

PHP API率限制:實施策略。PHP API率限制:實施策略。Mar 26, 2025 pm 04:16 PM

本文討論了在PHP中實施API速率限制的策略,包括諸如令牌桶和漏水桶等算法,以及使用Symfony/Rate-limimiter之類的庫。它還涵蓋監視,動態調整速率限制和手

php密碼哈希:password_hash和password_verify。php密碼哈希:password_hash和password_verify。Mar 26, 2025 pm 04:15 PM

本文討論了使用password_hash和pyspasswify在PHP中使用密碼的好處。主要論點是,這些功能通過自動鹽,強大的哈希算法和SECH來增強密碼保護

OWASP前10 php:描述並減輕常見漏洞。OWASP前10 php:描述並減輕常見漏洞。Mar 26, 2025 pm 04:13 PM

本文討論了OWASP在PHP和緩解策略中的十大漏洞。關鍵問題包括注射,驗證損壞和XSS,並提供用於監視和保護PHP應用程序的推薦工具。

PHP XSS預防:如何預防XSS。PHP XSS預防:如何預防XSS。Mar 26, 2025 pm 04:12 PM

本文討論了防止PHP中XSS攻擊的策略,專注於輸入消毒,輸出編碼以及使用安全增強的庫和框架。

PHP接口與抽像類:何時使用。PHP接口與抽像類:何時使用。Mar 26, 2025 pm 04:11 PM

本文討論了PHP中接口和抽像類的使用,重點是何時使用。界面定義了無實施的合同,適用於無關類和多重繼承。摘要類提供常見功能

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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Mac版

SublimeText3 Mac版

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

記事本++7.3.1

記事本++7.3.1

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

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。