亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    小編帶你學(xué)命名空間的調(diào)用順序

    上一篇文章中我們了解了訪問命名空間內(nèi)部元素,有需要的請看《小編帶你了解如何訪問命名空間內(nèi)部元素(php版)》。這次我們向大家介紹命名空間的順序,有需要的可以參考參考。

    首先讓我們看一個小例子。

    <?php namespace A; use BD, CE as F;  // 函數(shù)調(diào)用  foo();      // 首先嘗試調(diào)用定義在命名空間"A"中的函數(shù)foo()             // 再嘗試調(diào)用全局函數(shù) "foo"  foo();     // 調(diào)用全局空間函數(shù) "foo"   myfoo();   // 調(diào)用定義在命名空間"Amy"中函數(shù) "foo"   F();        // 首先嘗試調(diào)用定義在命名空間"A"中的函數(shù) "F"              // 再嘗試調(diào)用全局函數(shù) "F"  // 類引用  new B();    // 創(chuàng)建命名空間 "A" 中定義的類 "B" 的一個對象             // 如果未找到,則嘗試自動裝載類 "AB"  new D();    // 使用導(dǎo)入規(guī)則,創(chuàng)建命名空間 "B" 中定義的類 "D" 的一個對象             // 如果未找到,則嘗試自動裝載類 "BD"  new F();    // 使用導(dǎo)入規(guī)則,創(chuàng)建命名空間 "C" 中定義的類 "E" 的一個對象             // 如果未找到,則嘗試自動裝載類 "CE"  new B();   // 創(chuàng)建定義在全局空間中的類 "B" 的一個對象             // 如果未發(fā)現(xiàn),則嘗試自動裝載類 "B"  new D();   // 創(chuàng)建定義在全局空間中的類 "D" 的一個對象             // 如果未發(fā)現(xiàn),則嘗試自動裝載類 "D"  new F();   // 創(chuàng)建定義在全局空間中的類 "F" 的一個對象             // 如果未發(fā)現(xiàn),則嘗試自動裝載類 "F"  // 調(diào)用另一個命名空間中的靜態(tài)方法或命名空間函數(shù)  Bfoo();    // 調(diào)用命名空間 "AB" 中函數(shù) "foo"  B::foo();   // 調(diào)用命名空間 "A" 中定義的類 "B" 的 "foo" 方法             // 如果未找到類 "AB" ,則嘗試自動裝載類 "AB"  D::foo();   // 使用導(dǎo)入規(guī)則,調(diào)用命名空間 "B" 中定義的類 "D" 的 "foo" 方法             // 如果類 "BD" 未找到,則嘗試自動裝載類 "BD"  Bfoo();   // 調(diào)用命名空間 "B" 中的函數(shù) "foo"   B::foo();  // 調(diào)用全局空間中的類 "B" 的 "foo" 方法             // 如果類 "B" 未找到,則嘗試自動裝載類 "B"  // 當(dāng)前命名空間中的靜態(tài)方法或函數(shù)  AB::foo();   // 調(diào)用命名空間 "AA" 中定義的類 "B" 的 "foo" 方法               // 如果類 "AAB" 未找到,則嘗試自動裝載類 "AAB"  AB::foo();  // 調(diào)用命名空間 "A" 中定義的類 "B" 的 "foo" 方法               // 如果類 "AB" 未找到,則嘗試自動裝載類 "AB" ?>

    仔細觀察上面的小例子,我們可以觀察到什么?當(dāng)當(dāng)當(dāng),我們現(xiàn)在就給出答案。

    在函數(shù)調(diào)用的時候,如果我們只寫了“foo()”,先調(diào)用的命名空間中的函數(shù),然后在調(diào)用全局函數(shù);但如果是“foo()”,這就只調(diào)用全局函數(shù)了。

    在類應(yīng)用的時候,如果我們寫了“new B();”,將會創(chuàng)建命名空間中定義的類"B"的一個對象,但如果未找到,則嘗試自動裝載類"AB"。

    在調(diào)用另一個命名空間中的靜態(tài)方法或命名空間函數(shù)的時候,如何我們寫了“Bfoo()”,這表明我們將調(diào)用命名空間中的函數(shù)“foo()”;但如果寫的是“B::foo();”就不一樣了,他先調(diào)用命名空間中的函數(shù)“foo()”,但如果未找到,則嘗試自動裝載類"AB"。

    在當(dāng)前命名空間中的靜態(tài)方法或函數(shù)的時候,如何我們寫了“AB::foo();”,這表明我們會調(diào)用命名空間 "AA" 中定義的類 "B" 的 "foo" 方法,在沒有找到的情況下,自動裝載類 "AAB"。

    現(xiàn)在讓我們歸納一下。

    • 完全限定函數(shù)、類和常量的調(diào)用將會在編譯的時候解析。例如,newaB解析為類aB。

    • 所有的非限定名稱和限定名稱(非完全限定名稱)根據(jù)當(dāng)前的導(dǎo)入規(guī)則在編譯的時候進行轉(zhuǎn)換。例如,如果命名空間 ABC 被導(dǎo)入為 C,那么對 CDe() 的調(diào)用就會被轉(zhuǎn)換為 ABCDe()。

    • 所有非限定名和限定名(非完全限定名)都在編譯時根據(jù)當(dāng)前導(dǎo)入規(guī)則進行轉(zhuǎn)換。例如,如果命名空間aBC作為C導(dǎo)入,則對CDe()的調(diào)用將轉(zhuǎn)換為aBCDe()。

    • 非限定類名在編譯時根據(jù)當(dāng)前導(dǎo)入規(guī)則進行轉(zhuǎn)換(將短導(dǎo)入名替換為全名)。例如,如果命名空間aBC作為C導(dǎo)入,則新的C()將轉(zhuǎn)換為新的aBC()。

    • 在命名空間(例如,ab)中,對非限定名稱的函數(shù)調(diào)用在運行時解析。例如,對函數(shù)foo()的調(diào)用解析如下:

      • 在當(dāng)前命名空間中查找名為 ABfoo() 的函數(shù)

      • 嘗試查找并調(diào)用 全局(global) 空間中的函數(shù) foo()。

    • 對命名空間(如ab)內(nèi)的非限定名或限定名類(非完全限定名)的調(diào)用在運行時解析。以下是調(diào)用new c()和new de()的解析過程:解析new c():

      • 在當(dāng)前命名空間中查找ABC類。

      • 嘗試自動裝載類ABC。

    • new DE()的解析:

      • 在類名稱前面加上當(dāng)前命名空間名稱變成:ABDE,然后查找該類。

      • 嘗試自動裝載類 ABDE。

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

    就說到這里了,有其他想知道的,可以點擊這個哦?!?→php視頻教程

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號