php名稱空間的呼叫順序

westwolf發表於2021-09-11

php名稱空間的呼叫順序

1、完全限定函式、類和常量的呼叫將會在編譯的時候解析。例如,newaB解析為類aB。

2、所有的非限定名稱和限定名稱(非完全限定名稱),根據當前的匯入規則在編譯的時候進行轉換。例如,如果名稱空間 ABC 被匯入為 C,那麼對 CDe() 的呼叫就會被轉換為 ABCDe()。

3、所有非限定名和限定名(非完全限定名)都在編譯時根據當前匯入規則進行轉換。例如,如果名稱空間aBC作為C匯入,則對CDe()的呼叫將轉換為aBCDe()。

4、非限定類名在編譯時根據當前匯入規則進行轉換(將短匯入名替換為全名)。例如,如果名稱空間aBC作為C匯入,則新的C()將轉換為新的aBC()。

在名稱空間(例如,ab)中,對非限定名稱的函式呼叫在執行時解析。

對名稱空間(如ab)內的非限定名或限定名類(非完全限定名)的呼叫在執行時解析。以下是呼叫new c()和new de()的解析過程:解析new c():

new DE()的解析:

為了引用全域性名稱空間中的全域性類,必須使用完全限定名稱 new C()。

例項

namespace A;
use BD, CE as F;
// 函式呼叫
foo();      // 首先嚐試呼叫定義在名稱空間"A"中的函式foo()
            // 再嘗試呼叫全域性函式 "foo"
foo();     // 呼叫全域性空間函式 "foo"
myfoo();   // 呼叫定義在名稱空間"Amy"中函式 "foo"
F();        // 首先嚐試呼叫定義在名稱空間"A"中的函式 "F"
            // 再嘗試呼叫全域性函式 "F"
// 類引用
new B();    // 建立名稱空間 "A" 中定義的類 "B" 的一個物件
            // 如果未找到,則嘗試自動裝載類 "AB"
 
new D();    // 使用匯入規則,建立名稱空間 "B" 中定義的類 "D" 的一個物件
            // 如果未找到,則嘗試自動裝載類 "BD"
new F();    // 使用匯入規則,建立名稱空間 "C" 中定義的類 "E" 的一個物件
 
            // 如果未找到,則嘗試自動裝載類 "CE"
new B();   // 建立定義在全域性空間中的類 "B" 的一個物件
            // 如果未發現,則嘗試自動裝載類 "B"
new D();   // 建立定義在全域性空間中的類 "D" 的一個物件
            // 如果未發現,則嘗試自動裝載類 "D"
new F();   // 建立定義在全域性空間中的類 "F" 的一個物件
            // 如果未發現,則嘗試自動裝載類 "F"
// 呼叫另一個名稱空間中的靜態方法或名稱空間函式
Bfoo();    // 呼叫名稱空間 "AB" 中函式 "foo"
B::foo();   // 呼叫名稱空間 "A" 中定義的類 "B" 的 "foo" 方法
            // 如果未找到類 "AB" ,則嘗試自動裝載類 "AB"
D::foo();   // 使用匯入規則,呼叫名稱空間 "B" 中定義的類 "D" 的 "foo" 方法
            // 如果類 "BD" 未找到,則嘗試自動裝載類 "BD"
Bfoo();   // 呼叫名稱空間 "B" 中的函式 "foo"
B::foo();  // 呼叫全域性空間中的類 "B" 的 "foo" 方法
            // 如果類 "B" 未找到,則嘗試自動裝載類 "B"
// 當前名稱空間中的靜態方法或函式
AB::foo();   // 呼叫名稱空間 "AA" 中定義的類 "B" 的 "foo" 方法
              // 如果類 "AAB" 未找到,則嘗試自動裝載類 "AAB"
AB::foo();  // 呼叫名稱空間 "A" 中定義的類 "B" 的 "foo" 方法
              // 如果類 "AB" 未找到,則嘗試自動裝載類 "AB"
?>

以上就是php名稱空間的呼叫順序,希望對大家有所幫助。更多php學習指路:

本文轉載於php中文網,如有侵犯聯絡作者修改。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4662/viewspace-2828705/,如需轉載,請註明出處,否則將追究法律責任。

相關文章