核心要點
__LINE__
(返回源文件中的行號)、__FILE__
(表示文件的名稱,包括其完整路徑)、__DIR__
(僅表示文件的路徑)、__CLASS__
(返回當前類的名稱)、__FUNCTION__
(返回當前函數的名稱)、__METHOD__
(表示當前方法的名稱)和 __NAMESPACE__
(返回當前命名空間的名稱)。 __construct()
(用於創建類的對象實例)、__destruct()
(當對像被 PHP 的垃圾收集器銷毀時調用)、__get()
(如果屬性未定義或不可訪問,並且在 getter 上下文中調用時調用)、__set()
(在 setter 上下文中為未定義的屬性調用)、__isset()
(檢查屬性是否已設置)、__unset()
(接收一個參數,即程序想要取消設置的屬性的名稱)和 __toString()
(幫助將對象表示為字符串)。 PHP 為程序提供了一組特殊的預定義常量和魔術方法。與使用 define()
設置的常量不同,這些常量的值取決於它們在代碼中的使用位置,並用於訪問關於代碼和 PHP 的只讀信息。魔術方法是您可以在類中使用的保留方法名稱,用於與特殊的 PHP 功能掛鉤。如果您尚未了解 PHP 的魔術方法和常量,那麼本文適合您!我將回顧一些更有用的方法以及如何在代碼中使用它們。
預定義常量
預定義常量用於訪問有關代碼的信息。這裡的常量用雙下劃線括起來的全部大寫字母編寫,例如 __LINE__
和 __FILE__
。以下是 PHP 提供的一些有用的常量:
__LINE__
返回源文件中常量出現的行號,如下所示:<?php echo "line number: " . __LINE__; // line number: 2 echo "line number: " . __LINE__; // line number: 3 echo "line number: " . __LINE__; // line number: 4 ?>
__FILE__
表示文件的名稱,包括其完整路徑,如下所示:<?php echo "the name of this file is: " . __FILE__; // the directory and name of file is: C:wampwwwindex.php ?>
__DIR__
僅表示文件的路徑:<?php echo "the directory of this file is: " . __DIR__; // the directory of this file is: C:wampwww ?>
__CLASS__
返回當前類的名稱:<?php class Sample { public function __construct() { echo __CLASS__; } } $obj = new Sample(); // Sample ?>
__FUNCTION__
返回當前函數的名稱:<?php function mySampleFunc() { echo "the name the function is: " . __FUNCTION__; } mySampleFunc(); //the name of function is: mySampleFunc ?>
__METHOD__
表示當前方法的名稱:<?php class Sample { public static function myMethod() { echo "the name of method is: " . __METHOD__; } } Sample::myMethod(); // the name of the method is: myMethod ?>
__NAMESPACE__
返回當前命名空間的名稱:<?php namespace MySampleNS; echo "the namespace is: " . __NAMESPACE__; // the name space is: MySampleNS ?>
魔術方法
魔術方法提供與特殊 PHP 行為掛鉤的機制。與之前的常量不同,它們的名稱使用兩個前導下劃線以小寫/駝峰式字母編寫,例如 __construct()
和 __destruct()
。 __construct()
是 PHP 調用以創建類對象實例的魔術方法。它可以接受任意數量的參數。
<?php class MySample { public function __construct($foo) { echo __CLASS__ . " constructor called with $foo."; } } $obj = new MySample(42); // MySample constructor called with 42 ?>
顧名思義,__destruct()
方法在對像被 PHP 的垃圾收集器銷毀時調用。它不接受任何參數,通常用於執行可能需要的任何清理操作,例如關閉數據庫連接。
<?php class MySample { public function __destruct() { echo __CLASS__ . " destructor called."; } } $obj = new MySample; // MySample destructor called ?>
我們的下一個魔術方法處理屬性重載,並提供了一種讓 PHP 處理未定義(或我們無法訪問)的屬性和方法調用的方法。如果屬性未定義(或不可訪問)並且在 getter 上下文中調用,則 PHP 會調用 __get()
方法。該方法接受一個參數,即屬性的名稱。它應該返回一個值,該值被視為屬性的值。 __set()
方法在 setter 上下文中為未定義的屬性調用。它接受兩個參數,屬性名稱和值。
<?php echo "line number: " . __LINE__; // line number: 2 echo "line number: " . __LINE__; // line number: 3 echo "line number: " . __LINE__; // line number: 4 ?>
在上面的示例代碼中,屬性名稱未在類中定義。我嘗試將值“mysample”賦值給它,PHP 調用魔術方法 __set()
。它接收“name”作為 $prop
參數和“Alireza”作為 $value
,我將值存儲在私有 $myArray
數組中。 __get()
方法的工作方式類似;當我輸出 $obj->name
時,會調用 __get()
方法,並將“name”作為 $prop
參數傳入。還有其他魔術方法可以幫助我們檢索和檢查不可訪問的成員變量,這些成員變量也出現在示例代碼中:__isset()
、__unset()
和 __toString()
。 __isset()
和 __unset()
都由 PHP 中名稱相同(不帶下劃線)的函數觸發。 __isset()
檢查屬性是否已設置,並接受一個參數,即我們要測試的屬性。 __unset()
接收一個參數,即程序想要取消設置的屬性的名稱。在許多情況下,將對象表示為字符串非常有用,例如輸出給用戶或其他進程。通常情況下,PHP 將它們表示為內存中的 ID,這對我們來說並不好。 __toString()
方法幫助我們將對象表示為字符串。該方法在任何將對像用作字符串的情況下都會被觸發,例如:echo "Hello $obj"
。它也可以像任何其他普通公共方法一樣直接調用,這比諸如附加空字符串以強制轉換之類的技巧更可取。
總結
面向對象編程可以產生更易於維護和測試的代碼。它幫助我們創建更好、更標準的 PHP 代碼。此外,它還可以利用 PHP 提供的魔術方法和常量。
圖片來自 Stepan Kapl / Shutterstock
PHP 魔術方法和預定義常量的常見問題解答
PHP 中的魔術方法是當滿足某些條件時會自動觸發的特殊函數。它們總是以雙下劃線 () 開頭。 PHP 中不同類型的魔術方法包括 `construct()、
destruct()、
call()、
callStatic()、
get()、
set()、
isset()、
unset ()、
sleep()、
wakeup()、
toString()、
invoke()、
set_state()、
clone()和
debugInfo()`。這些方法中的每一個都由特定事件觸發,例如創建對象時、訪問屬性時或調用方法時。
PHP 中的預定義常量是始終可用的內置常量。它們包括核心常量,如 PHP_VERSION
和 PHP_OS
,以及各種擴展定義的許多其他常量。要使用預定義常量,只需編寫其名稱,而無需在其前面添加美元符號 ($) 。例如,要獲取當前的 PHP 版本,可以使用 PHP_VERSION
常量,如下所示:echo PHP_VERSION;
__construct()
魔術方法的用途是什麼? PHP 中的 __construct()
魔術方法在每次從類創建新對象時都會自動調用。它通常用於初始化對象的屬性或執行對像在使用前所需的任何設置。
是的,您可以使用 define()
函數或 const
關鍵字在 PHP 中定義自己的常量。定義常量後,就不能更改或取消定義它。
PHP 中魔術方法和常規方法的主要區別在於,魔術方法會由某些事件自動觸發,而常規方法需要顯式調用。此外,魔術方法總是以雙下劃線 (__) 開頭,而常規方法則不是。
您可以使用 defined()
函數檢查 PHP 中是否定義了常量。此函數將常量的名稱作為字符串,如果常量已定義,則返回 true,否則返回 false。
__destruct()
魔術方法的用途是什麼? PHP 中的 __destruct()
魔術方法在對像被銷毀或腳本結束時自動調用。它通常用於執行清理任務,例如關閉數據庫連接或釋放資源。
是的,您可以在 PHP 中將魔術方法與靜態方法一起使用。 __callStatic()
魔術方法在調用不可訪問或類中不存在的靜態方法時會自動觸發。
PHP 中的預定義常量通常用於獲取有關 PHP 環境的信息或控制某些函數的行為。例如,PHP_VERSION
常量可用於檢查 PHP 版本,PHP_OS
常量可用於檢查操作系統。
是的,您可以在 PHP 中重寫魔術方法。創建子類時,您可以提供自己的魔術方法實現。但是,如果您想調用父類的實現,可以使用 parent
關鍵字。
以上是PHP中的魔術方法和預定義常數的詳細內容。更多資訊請關注PHP中文網其他相關文章!