使用命名空間的基礎
<?php
namespace
subnamespance;$a
=new
test\foo()
;test\foo::
staticmethod()
;
以上foo
類是被解析為subnamespance\test\foo
<?php$a=
new\test\foo()
;\test\foo::
staticmethod()
;
<?php
namespace
foo\bar\subnamespace
;const
foo=1;
function
foo(
)class
foo}
?>
<?php
namespace
foo\bar
;include
'./testfileone.php'
;const
foo=2;
function
foo(
)class
foo}
?>
在two.php檔案中開始測試:
呼叫foo()
函式。這個時候就是非限定名稱,那麼此時呼叫的就是two.php的foo()
函式,同理呼叫定義的常量foo
它也是two.php
的,呼叫類
的靜態方法staticmethod()
,它們都是屬於非限定名稱形式的呼叫,都是two.php
的。
如果是限定名稱形式的呼叫呢,首先是看one.php
和two.php
的命名空間,one.php => foo\bar\subnamespace
,two.php => foo\bar
,
它們命名空間前兩個是相同的,即foo\bar
, 那麼此時在two.php
裡想要呼叫foo()
函式,就可以這樣做subnamespace\foo()
最終就會被解析為:
當前命名空間加上手動呼叫的,==》foo\bar\subnamespace\foo()
,呼叫類和常量是同理
完全限定,就是在two.php
呼叫a.php
的函式,類,常量,以及方法等等,在呼叫的時候需要加上one.php
的命名空間,就是這樣:\foo\bar\subnamespace\foo()
匯入操作是在編譯執行的,但動態的類名稱、函式名稱或常量名稱則不是。匯入操作只影響非限定名稱和限定名稱。完全限定名稱由於是確定的,故不受匯入的影響。
<?php
namespace
;function
fopen
(string $file
)
1.對完全限定名稱的函式,類和常量的呼叫在編譯時解析。
<?php
new\a\b()
;//解析為 命名空間a下面的b類
2.所有的非限定名稱和限定名稱(非完全限定名稱)根據當前的匯入規則在編譯時進行轉換
<?php
namespace
a\b;
class
t1new
c\d\t2()
;?>
<?php
namespace
a\b\c\d
;class
t2?>
//在命名空間是a\b裡呼叫t2;最終解析為 a\b\c\d\t2();
3.在命名空間內部,所有的沒有根據匯入規則轉換的限定名稱均會在其前面加上當前的命名空間名稱
4.非限定類名根據當前的匯入規則在編譯時轉換(用全名代替短的匯入名稱)
5.在命名空間內部(例如a\b),對非限定名稱的函式呼叫是在執行時解析的。例如對函式 foo() 的呼叫是這樣解析的:在當前命名空間中查詢名為 a\b\foo() 的函式
嘗試查詢並呼叫 全域性(global) 空間中的函式 foo()。
6.在命名空間(例如a\b)內部對非限定名稱或限定名稱類(非完全限定名稱)的呼叫是在執行時解析的。下面是呼叫 new c() 及 new d\e() 的解析過程: new c()的解析:在當前命名空間中查詢a\b\c類。
嘗試自動裝載類a\b\c。
new d\e()的解析:
在類名稱前面加上當前命名空間名稱變成:a\b\d\e,然後查詢該類。
嘗試自動裝載類 a\b\d\e。
PHP命名空間學習
1 任何php 都可以包含在命名空間檔案中,但受到影響的只有類,函式,常量。2 定義命名空間 使用關鍵字namespace 宣告 而且必須在所有其它 之前 包括非 php 空白符 宣告。3 唯一可以出現在宣告命名空間語句之前的,是定義原始檔編碼宣告的declare 語句。例如 declare enc...
PHP命名空間學習筆記
命名空間的支援版本 php 5 5.3.0,php 7 從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。例如,在作業系統中目錄用來將相關檔案分組,對於目錄中的檔案來說,它就扮演了命名空間的角色。具體舉個例子,檔案 foo.txt 可以同時在目錄 home greg 和 ...
php 命名空間,PHP使用命名空間
介紹 命名空間中的類,函式或常量可以通過以下方式使用 在當前命名空間中使用類 指定相對於當前命名空間的命名空間 提供命名空間的全限定名稱 從當前命名空間 在此示例中,從test1.php載入了命名空間。沒有命名空間引用的函式或類名稱將訪問當前命名空間中的功能或類名稱 示例 test1.php nam...