搜尋
首頁php教程PHP开发PHP 魔術變數與魔術函數詳解

魔術變數

PHP 向它運行的任何腳本提供了大量的預定義常數。

不過很多常數都是由不同的擴充函式庫定義的,只有在載入了這些擴充函式庫時才會出現,或是動態載入後,或是在編譯時已經包含進去了。

有八個魔術常數它們的值隨著它們在程式碼中的位置改變而改變。

例如 __LINE__ 的值就依賴它在腳本中所處的行來決定。這些特殊的常數不區分大小寫,如下:

__LINE__

檔案中的目前行號。

實例:

<?php
echo &#39;这是第 “ &#39;  . __LINE__ . &#39; ” 行&#39;;
?>

以上實例輸出結果為:

这是第 “ 2 ” 行

__FILE__

檔案的完整路徑和檔案名稱。如果用在被包含檔案中,則傳回被包含的檔案名稱。

自 PHP 4.0.2 起,__FILE__ 總是包含一個絕對路徑(如果是符號連接,則是解析後的絕對路徑),而在此之前的版本有時會包含一個相對路徑。

實例:

?php
echo &#39;该文件位于 “ &#39;  . __FILE__ . &#39; ” &#39;;
?>

以上實例輸出結果為:

该文件位于 “ E:\wamp\www\test\index.php ”

__DIR__

檔案所在的目錄。如果用在被包含檔案中,則傳回被包含的檔案所在的目錄。

它等價於 dirname(__FILE__)。除非是根目錄,否則目錄中名不包括末尾的斜杠。 (PHP 5.3.0新增)

實例:

<?php
echo &#39;该文件位于 “ &#39;  . __DIR__ . &#39; ” &#39;;
?>

以上實例輸出結果為:

该文件位于 “ E:\wamp\www\test ”

__FUNCTION__

函數名稱(PHP 4.3.0 新加)。自 PHP 5 起本常數傳回該函數被定義時的名字(區分大小寫)。在 PHP 4 中該值總是小寫字母的。

實例:

?php
function test() {
 echo  &#39;函数名为:&#39; . __FUNCTION__ ;
}
test();
?>

以上實例輸出結果為:

函数名为:test

__CLASS__

類別的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常數傳回該類別被定義時的名字(區分大小寫)。

在 PHP 4 中該值總是小寫字母的。類別名稱包括其被宣告的作用區域(例如 FooBar)。注意自 PHP 5.4 起 __CLASS__ 對 trait 也起作用。當用在 trait 方法時,__CLASS__ 是呼叫 trait 方法的類別的名字。

實例:

<?php
class test {
 function _print() {
  echo &#39;类名为:&#39;  . __CLASS__ . "<br>";
  echo  &#39;函数名为:&#39; . __FUNCTION__ ;
 }
}
$t = new test();
$t->_print();
?>

以上實例輸出結果為:

類別名稱為:test
函數名稱為:_print

__TRAIT__

Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 實作了程式碼重複使用的一個方法,稱為 traits。

Trait 名包括其被聲明的作用區域(例如 FooBar)。

從基底類別繼承的成員被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆寫。其行為 MyHelloWorld 類別中定義的方法一致。優先順序是目前類別中的方法會覆寫 trait 方法,而 trait 方法又覆寫了基底類別中的方法。

<?php
class Base {
    public function sayHello() {
        echo &#39;Hello &#39;;
    }
}
 {
    public function sayHello() {
        parent::sayHello();
        echo &#39;World!&#39;;
    }
}
class MyHelloWorld extends Base {
    
}
$o = new MyHelloWorld();
$o->sayHello();
?>

以上程式會輸出:

Hello World!

METHOD__

類別的方法名稱(PHP 5.0.0 新加)。傳回該方法被定義時的名字(區分大小寫)。

實例:

<?php
function test() {
 echo  &#39;函数名为:&#39; . __METHOD__ ;
}
test();
?>

以上實例輸出結果為:

函数名为:test

__NAMESPACE__

目前命名空間的名稱(區分大小寫)。此常數是在編譯時定義的(PHP 5.3.0 新增)。

實例:

<?php
namespace MyProject;
echo &#39;命名空间为:"&#39;, __NAMESPACE__, &#39;"&#39;; // 输出 "MyProject"
?>

以上實例輸出結果為:

命名空间为:"MyProject"

魔術函數

__construct() 
    實例化物件時被調用, 
被調用,另一個不被調用。

__destruct() 
    當刪除一個物件或物件操作終止時被呼叫。

__call() 
    物件呼叫某個方法, 
    若方法存在,則直接呼叫; 
    若不存在,則會去呼叫__call函數。

__get() 
    讀取物件的屬性時, 
    若屬性存在,則直接傳回屬性值; 
    若不存在,則會呼叫__get函數。

__set() 
    設定物件的屬性時, 
    若屬性存在,則直接賦值; 
    若不存在,則呼叫__set函數。

__toString() 
    列印一個物件的時被呼叫。如echo $obj;或print $obj;

__clone() 
    複製物件時被呼叫。如:$t=new Test();$t1=clone $t;

__sleep() 
    serialize之前被呼叫。若物件比較大,想刪減一點東東再序列化,可考慮此函數。

__wakeup() 
    unserialize時被調用,做些物件的初始化工作。

__isset() 
    偵測一個物件的屬性是否存在時被呼叫。如:isset($c->name)。

__unset() 
    unset一個物件的屬性時被呼叫。如:unset($c->name)。

__set_state() 
    呼叫var_export時,被呼叫。用__set_state的回傳值做為var_export的回傳值。

__autoload() 
    實例化一個物件時,如果對應的類別不存在,則該方法被呼叫。

以上就是本文的全部內容了,小夥伴們是否對魔術變數和魔術函數有了新的認識了呢,希望大家喜歡本文內容,更多內容請關注PHP中文網(www.php.cn)!


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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脫衣器

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中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

PhpStorm Mac 版本

PhpStorm Mac 版本

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

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版