亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
魔術(shù)常數(shù)在編譯時解決
每個魔術(shù)在封閉中的表現(xiàn)如何
__FUNCTION__ - 返回封閉功能名稱
__METHOD__ - 適用相同的規(guī)則
__LINE____FILE__ - 字面源位置
__CLASS__ - 與上下文有關(guān)
__TRAIT____NAMESPACE__
實際含義
運行時上下文的解決方法
概括
首頁 後端開發(fā) php教程 魔術(shù)常數(shù)神秘:匿名功能和關(guān)閉的行為

魔術(shù)常數(shù)神秘:匿名功能和關(guān)閉的行為

Jul 29, 2025 am 04:41 AM
PHP Magic Constants

PHP中的魔術(shù)常數(shù)根據(jù)源代碼位置而不是運行時上下文解決了編譯時間。 2。在匿名函數(shù)內(nèi)部,函數(shù)返回一個空字符串,因為閉合缺少名稱。 3。功能__,__method__和__ class反映定義閉合的封閉功能,方法或類,而不是閉合本身。 4。列和文件返回文字線號和文件路徑,無論何時呼叫,都寫了閉合的路徑。 5。特質(zhì)將返回特徵的名稱,如果特徵內(nèi)定義了閉合,並且名稱空間在定義點返回當前名稱空間。 6。要獲取諸如呼叫者位置之類的運行時上下文,請使用debug_backtrace()或手動上下文傳遞,因為魔術(shù)常數(shù)無法提供動態(tài)的呼叫信息。因此,魔術(shù)常數(shù)基於其定義站點而不是執(zhí)行上下文可以預見,這使得它們不適合在運行時進行內(nèi)省關(guān)閉。

魔術(shù)常數(shù)神秘:匿名功能和關(guān)閉的行為

PHP中的魔術(shù)常數(shù) - 例如__LINE____FILE__ , __FUNCTION__等。是以可預測的方式表現(xiàn)出來的,但是它們與匿名功能和關(guān)閉的互動有時會使開發(fā)人員感到困惑。讓我們闡明這些魔術(shù)常數(shù)在這種情況下如何工作。

魔術(shù)常數(shù)在編譯時解決

要理解的關(guān)鍵點是,魔術(shù)常數(shù)不是變量- 它們在編譯時而不是在運行時由PHP解決。這意味著它們的值是根據(jù)源代碼出現(xiàn)的位置確定的,而不是執(zhí)行代碼的位置。

例如:

 echo __line__; //輸出當前行號

無論該線路運行何處(即使在功能或閉合內(nèi)),它都會輸出文件中寫入的行號。

即使在匿名函數(shù)中,此行為也具有真實性:

 $ lambda = function(){
    返回__function__;
};

echo $ lambda(); //輸出:“”

為什麼要空字符串?因為__FUNCTION__匿名函數(shù)內(nèi)部返回當前函數(shù)的名稱。但是匿名功能沒有名稱,因此PHP返回一個空字符串。

每個魔術(shù)在封閉中的表現(xiàn)如何

讓我們?yōu)g覽最常見的魔術(shù)常數(shù),看看它們在封閉中的表現(xiàn)。

__FUNCTION__ - 返回封閉功能名稱

在閉合內(nèi), __FUNCTION__指的是包含閉合的函數(shù)的名稱,而不是閉合本身。

功能mycontroller(){
    $ clocure = function(){
        返回__function__;
    };
    echo $ clipure(); //輸出:“ mycontroller”
}

即使該代碼在關(guān)閉內(nèi)部執(zhí)行, __FUNCTION__解決了定義代碼的位置 - 在這種情況下,在myController內(nèi)部。

__METHOD__ - 適用相同的規(guī)則

__METHOD__包括類名稱和方法,但再次反映了代碼中常數(shù)出現(xiàn)的方法。

類用戶{
    公共功能登錄(){
        $ clocure = function(){
            返回__Method__;
        };
        echo $ clipure(); //輸出:“用戶::登錄”
    }
}

儘管如此,它不是關(guān)閉方法(因為它沒有),而是封閉方法。

__LINE____FILE__ - 字面源位置

這些是最直接的。他們返回寫入常數(shù)的文件路徑和行號。

 $ clocure = function(){
    迴聲“文件:”。 __文件__ 。 “ \ n”;
    迴聲“線:”。 __線__ 。 “ \ n”;
};

$ CLASURE();
//輸出定義關(guān)閉的實際文件和行號

即使將封閉式傳遞給另一個文件或以後將其調(diào)用,值也不會更改。

__CLASS__ - 與上下文有關(guān)

__CLASS__行為相似:它返回定義代碼的類的名稱。

班級付款{
    公共功能過程(){
        $ clocure = function(){
            返回__ class__;
        };
        echo $ clipure(); //輸出:“付款”
    }
}

但是,如果關(guān)閉在任何類之外定義,它將什麼都沒有返回(或在某些情況下觸發(fā)通知)。

__TRAIT____NAMESPACE__

  • __TRAIT__ :僅在特徵定義內(nèi)有意義。在特徵內(nèi)的封閉中,它返回特徵的名稱。
  • __NAMESPACE__ :在定義點返回當前名稱空間。

實際含義

由於魔術(shù)常數(shù)是編譯時文字,因此您不能使用它們來內(nèi)省封閉本身。例如:

  • 您無法通過__FUNCTION__封閉的“名稱”。
  • 您無法動態(tài)地檢測到封閉的位置 - __LINE__將始終顯示其定義的位置。

這可以提高期望運行時上下文的調(diào)試或記錄工具。

運行時上下文的解決方法

如果您需要運行時信息(例如,在調(diào)用關(guān)閉的地方),則需要使用其他方法:

  • 使用debug_backtrace()檢查呼叫堆棧。
  • 手動將上下文傳遞到封閉中。
  • 在閉合對像上使用反射(有限)。

例子:

 $ clocure = function(){
    $ trace = debug_backtrace(debug_backtrace_ignore_args,1);
    $ caller = $ trace [0];
    返回“從{$ caller ['file']}在line {$ caller ['line']}上調(diào)用的“返回”;
};

__FILE__ / __LINE__不同,這為您提供了實際的運行時位置。

概括

  • 魔術(shù)常數(shù)根據(jù)源代碼位置編譯時解決。
  • 在關(guān)閉中:
    • __FUNCTION__ , __METHOD__ , __CLASS__指的是封閉範圍,而不是閉合。
    • __LINE__ , __FILE__指向閉合的位置。
  • 匿名函數(shù)沒有名稱,因此__FUNCTION__返回一個空字符串。
  • 對於運行時上下文,請使用debug_backtrace()或手動跟蹤。

基本上,魔術(shù)常數(shù)不夠魔術(shù),無法知道它們在封閉之內(nèi) - 他們只是在解析PHP文件時看到周圍的文字。請記住這一點,他們的行為是完全合理的。

以上是魔術(shù)常數(shù)神秘:匿名功能和關(guān)閉的行為的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

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整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

__Trait__的上下文魔術(shù):它在課堂內(nèi)的行為 __Trait__的上下文魔術(shù):它在課堂內(nèi)的行為 Jul 29, 2025 am 04:31 AM

TRAITisamagicconstantinPHPthatalwaysreturnsthenameofthetraitinwhichitisdefined,regardlessoftheclassusingit.1.Itisresolvedatcompiletimewithinthetrait’sscopeanddoesnotchangebasedonthecallingclass.2.UnlikeCLASS__,whichreflectsthecurrentclasscontext,__TR

構(gòu)建防彈自動加載器:深入研究__DIR__常數(shù) 構(gòu)建防彈自動加載器:深入研究__DIR__常數(shù) Jul 31, 2025 pm 12:47 PM

dirisessential forbuildingReliablephpautoloadersbecapeitProvideStable,絕對epathtothtothecurrentfile'sdirectory,可確保ConsistentBehaviorActractRospDifferentenVerentenments.1.unlikeLikeLikeLikeLikeLikeLikeLativePathSorgatSorgetCwd(),Diriscontext-Expontext-Indeptertentententententententententertentertentertriprip,disternepertriper,ingingfailfip

掌握相對路徑:__dir__和__file__的功能 掌握相對路徑:__dir__和__file__的功能 Jul 30, 2025 am 05:35 AM

DIR和FILE是PHP中的魔術(shù)常量,能有效解決相對路徑在復雜項目中導致的文件包含錯誤。 1.FILE返回當前文件的完整路徑,__DIR__返回其所在目錄;2.使用DIR可確保include或require總是相對於當前文件執(zhí)行,避免因調(diào)用腳本不同而導致路徑錯誤;3.可用於可靠包含文件,如require_onceDIR.'/../config.php';4.在入口文件中定義BASE_DIR常量以統(tǒng)一項目路徑管理;5.安全加載配置文件,如$config=requireDIR.'/config/dat

通過__line __,__file__和__function _______________________________________________________________________________________________________________________________ 通過__line __,__file__和__function _______________________________________________________________________________________________________________________________ Jul 29, 2025 am 03:21 AM

theSostEffectiveDebuggingTrickinc/c Isusing the-inmacros__file __,__行__和__function__togetPreciseErrorContext.1 .__ file __ file __providestHecurrentsourcefile'spathasastring.2 .__ line__ line__ line__givestHecurrentLineNumberenneNumberennumberennumberennumber.___________________________3

通過__dir__解決複雜應用中的路徑歧義 通過__dir__解決複雜應用中的路徑歧義 Jul 29, 2025 am 03:51 AM

使用__DIR__可以解決PHP應用中的路徑問題,因為它提供當前文件所在目錄的絕對路徑,避免相對路徑在不同執(zhí)行上下文下的不一致。 1.DIR__始終返回當前文件的目錄絕對路徑,確保包含文件時路徑準確;2.使用__DIR.'/../config.php'等方式可實現(xiàn)可靠文件引用,不受調(diào)用方式影響;3.在入口文件中定義APP_ROOT、CONFIG_PATH等常量,提昇路徑管理的可維護性;4.將__DIR__用於自動加載和模塊註冊,保證類和服務路徑正確;5.避免依賴$_SERVER['DOCUMENT

使用__Class__,__Method__和__ -Namespace________________________________________________________________________________________________________________________________________________________________________ 使用__Class__,__Method__和__ -Namespace________________________________________________________________________________________________________________________________________________________________________ Aug 01, 2025 am 07:48 AM

CLASS__,__METHOD__,and__NAMESPACEarePHPmagicconstantsthatprovidecontextualinformationformetaprogramming.1.CLASSreturnsthefullyqualifiedclassname.2.METHODreturnstheclassandmethodnamewithnamespace.3.NAMESPACEreturnsthecurrentnamespacestring.Theyareused

通過上下文魔術(shù)常數(shù)增強您的錯誤記錄策略 通過上下文魔術(shù)常數(shù)增強您的錯誤記錄策略 Aug 01, 2025 am 07:47 AM

Contextualmagicconstantsarenamed,meaningfulidentifiersthatprovideclearcontextinerrorlogs,suchasUSER_LOGIN_ATTEMPTorPAYMENT_PROCESSING.2.Theyimprovedebuggingbyreplacingvagueerrormessageswithspecific,searchablecontext,enablingfasterrootcauseidentificat

魔術(shù)常數(shù)如何增強您的基於特質(zhì)的架構(gòu) 魔術(shù)常數(shù)如何增強您的基於特質(zhì)的架構(gòu) Jul 29, 2025 am 04:07 AM

在trait-based架構(gòu)中,魔法常量並非反模式,而是可作為有意設(shè)計的編譯時標記或優(yōu)化提示。 1.魔法常量可用作版本開關(guān),如通過constVERSION:u8區(qū)分序列化行為,使下游代碼依據(jù)版本條件編譯;2.可作為標籤優(yōu)化動態(tài)派發(fā),如為trait實現(xiàn)分配唯一TAG常量,實現(xiàn)快速路徑匹配並可能被編譯器內(nèi)聯(lián)消除;3.可替代RTTI提供輕量級類型區(qū)分,如通過編譯時哈希生成類型指紋,避免運行時類型信息開銷;4.使用時需避免真正“魔法”,應統(tǒng)一定義、充分文檔化,並優(yōu)先使用枚舉或位標誌增強可讀性,如用enum

See all articles