您好,登錄后才能下訂單哦!
PHP namespace 命名空間 函數調用 類引用 詳細測試分析
本文測試中,假設index.php頁面和test.php頁面在同一個根目錄下,方便加載test.php頁面。
前提條件都是在namespace A;下進行測試。
namespace A; use B\D, C\E as F;
// 函數調用
foo(); // 首先嘗試調用定義在命名空間"A"中的函數foo()
\foo(); // 調用全局空間函數 "foo"
my\foo(); // 調用定義在命名空間"A\my"中函數 "foo"
F(); // 首先嘗試調用定義在命名空間"A"中的函數 "F"
B\foo(); // 調用命名空間 "A\B" 中函數 "foo"
B::foo(); // 調用命名空間 "A" 中定義的類 "B" 的 "foo" 方法
D::foo(); // 使用導入規則,調用命名空間 "B" 中定義的類 "D" 的 "foo" 方法
\B\foo(); // 調用命名空間 "B" 中的函數 "foo"
\B::foo(); // 調用全局空間中的類 "B" 的 "foo" 方法
A\B::foo(); // 調用命名空間 "A\A" 中定義的類 "B" 的 "foo" 方法
\A\B::foo(); // 調用命名空間 "A\B" 中定義的類 "B" 的 "foo" 方法
//類引用
new B(); // 創建命名空間 "A" 中定義的類 "B" 的一個對象
new D(); // 使用導入規則,創建命名空間 "B" 中定義的類 "D" 的一個對象
new F(); // 使用導入規則,創建命名空間 "C" 中定義的類 "E" 的一個對象
new \B(); // 創建定義在全局空間中的類 "B" 的一個對象
new \D(); // 創建定義在全局空間中的類 "D" 的一個對象
new \F(); // 創建定義在全局空間中的類 "F" 的一個對象
函數調用
1當前命名空間A下函數調用 語法 foo();
index.php頁面
<?php namespace A; header("content-type:text/html;charset=utf-8"); require 'test.php';//加載定義命名空間"A\my"的頁面 function foo(){ echo '我是命名空間"A"中的函數foo()'; } // 函數調用 foo(); // 首先嘗試調用定義在命名空間"A"中的函數foo() // 再嘗試調用全局函數 "foo"
結果為
我是命名空間"A"中的函數foo()
2當前命名空間A下調用命名空間"A\my"中的函數foo() 語法 my\foo();
index.php頁面
<?php namespace A; header("content-type:text/html;charset=utf-8"); require 'test.php';//加載定義命名空間"A\my"的頁面 //調用函數 my\foo(); // 調用定義在命名空間"A\my"中函數 "foo" ?>
test.php頁面(定義命名空間"A\my"的頁面)
<?php namespace A\my; function foo(){ echo '我是命名空間"A\my"中的函數foo()'; } ?>
結果為
我是命名空間"A\my"中的函數foo()
3.當前命名空間A下調用命名空間 "A\B"的函數"foo"
語法
require 'test.php';//加載命名空間 "A\B"的函數"foo"文件
B\foo();
index.php頁面
<?php namespace A; header("content-type:text/html;charset=utf-8"); use B\D, C\E as F; require 'test.php';//加載命名空間 "A\B"的函數"foo"文件 B\foo(); // 調用命名空間 "A\B" 中函數 "foo" ?>
test.php頁面(定義命名空間 "A\B"的函數"foo"的頁面)
<?php namespace A\B; function foo(){ echo '命名空間 "A\B" 中函數 "foo"'; } ?>
結果為
命名空間 "A\B" 中函數 "foo"
4.當前命名空間A下調用本命名空間 "A" 中定義的類 "B" 的 "foo" 靜態方法
語法
B::foo();
index.php頁面
<?php namespace A; header("content-type:text/html;charset=utf-8"); use B\D, C\E as F; class B{ static public function foo(){ echo '命名空間 "A" 中定義的類 "B" 的 "foo" 方法'; } } B::foo(); // 調用命名空間 "A" 中定義的類 "B" 的 "foo" 方法 // 如果未找到類 "A\B" ,則嘗試自動裝載類 "A\B" ?>
結果為
命名空間 "A" 中定義的類 "B" 的 "foo" 方法
5.當前命名空間A下調用本命名空間 "B" 中定義的類 "D" 的 "foo" 靜態方法
語法
require 'test.php'; //加載文件
use B\D; //引導類
D::foo(); //進行調用
index.php頁面
<?php namespace A; header("content-type:text/html;charset=utf-8"); require 'test.php'; use B\D, C\E as F; D::foo(); // 使用導入規則,調用命名空間 "B" 中定義的類 "D" 的 "foo" 方法 // 如果類 "B\D" 未找到,則嘗試自動裝載類 "B\D" ?>
test.php頁面(定義命名空間 "B"的類"D"的函數"foo"的頁面)
<?php namespace B; class D{ static public function foo(){ echo '命名空間 "B" 中定義的類 "D" 的 "foo" 方法'; } } ?>
結果為
命名空間 "B" 中定義的類 "D" 的 "foo" 方法
6.當前命名空間A下調用命名空間 "B"的函數"foo"
語法
require 'test.php';//加載命名空間 "B"的函數"foo"文件
\B\foo();
index.php頁面
<?php namespace A; header("content-type:text/html;charset=utf-8"); use B\D, C\E as F; require 'test.php';//加載命名空間 "B"的函數"foo"文件 \B\foo(); // 調用命名空間 "B" 中函數 "foo" ?>
test.php頁面(定義命名空間 "B"的函數"foo"的頁面)
<?php namespace B; function foo(){ echo '命名空間 "B" 中函數 "foo"'; } ?>
結果為
命名空間 "B" 中函數 "foo"
7.當前命名空間A下調用全局空間 "B"的函數"foo"靜態方法
語法
require 'test.php';//加載全局空間 "B"的函數"foo"文件
\B::foo();
index.php頁面
<?php namespace A; header("content-type:text/html;charset=utf-8"); use B\D, C\E as F; require 'test.php';//加載全局空間 "B"的函數"foo"文件 \B::foo(); // 調用全局空間中的類 "B" 的 "foo" 方法 // 如果類 "B" 未找到,則嘗試自動裝載類 "B" ?>
test.php頁面(定義全局空間 "B"的函數"foo"的頁面)
<?php class B{ static public function foo(){ echo '全局空間的B類中foo方法'; } } ?>
結果為
全局空間的B類中foo方法
8.當前命名空間A下調用命名空間 "A\A"的B類"foo"靜態方法
語法
require 'test.php';//加載命名空間 "A\A"的B類"foo"靜態方法文件
A\B::foo();
index.php頁面
<?php namespace A; header("content-type:text/html;charset=utf-8"); use B\D, C\E as F; require 'test.php';//加載命名空間 "A\A"的B類"foo"靜態方法文件 A\B::foo(); // 調用命名空間 "A\A" 中定義的類 "B" 的 "foo" 方法 // 如果類 "A\A\B" 未找到,則嘗試自動裝載類 "A\A\B" ?>
test.php頁面(定義命名空間 "A\A"的B類"foo"靜態方法的頁面)
<?php namespace A\A; class B{ static public function foo(){ echo '命名空間A\A中B類foo方法'; } } ?>
結果為
命名空間A\A中B類foo方法
9.當前命名空間A下調用命名空間 "A\B"的B類"foo"靜態方法
語法
require 'test.php';//加載命名空間 "A\B"的B類"foo"靜態方法文件
\A\B::foo();
index.php頁面
<?php namespace A; header("content-type:text/html;charset=utf-8"); require 'test.php';//加載命名空間 "A\B"的B類"foo"靜態方法文件 \A\B::foo(); // 調用命名空間 "A\B" 中定義的類 "B" 的 "foo" 方法 // 如果類 "A\B" 未找到,則嘗試自動裝載類 "A\B" ?>
test.php頁面(定義命名空間 "A\B"的B類"foo"靜態方法的頁面)
<?php namespace A\B; class B{ static public function foo(){ echo '命名空間A\B中B類的foo靜態方法'; } } ?>
結果為
命名空間A\B中B類的foo靜態方法
類引用
1當前命名空間A下本空間類引用 語法 $b=new B();
index.php頁面
<?php namespace A; header("content-type:text/html;charset=utf-8"); use B\D, C\E as F; class B{ public $name='我是命名空間 "A" 中定義的類 "B" 的一個對象'; } $b=new B(); // 創建命名空間 "A" 中定義的類 "B" 的一個對象 // 如果未找到,則嘗試自動裝載類 "A\B" echo $b->name;
結果為
我是命名空間 "A" 中定義的類 "B" 的一個對象
2當前命名空間A下命名空間 "B" 中定義的類 "D"引用
語法
use B\D //導入命名空間B中的D類
$b=new D();
index.php頁面
<?php namespace A; header("content-type:text/html;charset=utf-8"); use B\D, C\E as F; require 'test.php';//加載命名空間B中的D類的文件 $d=new D(); // 使用導入規則,創建命名空間 "B" 中定義的類 "D" 的一個對象 // 如果未找到,則嘗試自動裝載類 "B\D" echo $d->name; ?>
test.php頁面(定義命名空間B中D類的頁面)
<?php namespace B; class D{ public $name='命名空間B中D類'; } ?>
結果為
命名空間B中D類
3當前命名空間A下命名空間 "C" 中定義的類 "E"引用
語法
use C\E as F //導入命名空間C中的E類 F為命名空間 "C" 中定義的類 "E"的別名
$b=new F();
index.php頁面
<?php namespace A; header("content-type:text/html;charset=utf-8"); use B\D, C\E as F; require 'test.php';//加載命名空間C中的E類的文件 $f=new F(); // 使用導入規則,創建命名空間 "C" 中定義的類 "E" 的一個對象 // 如果未找到,則嘗試自動裝載類 "C\E" echo $f->name; ?>
test.php頁面(定義命名空間C中E類的頁面)
<?php namespace C; class E{ public $name='命名空間C中E類'; } ?>
結果為
命名空間C中E類
4當前命名空間A下全局空間中定義的類 "B","D" "F"引用
語法
require 'test.php';//加載全局空間中定義的類 "B","D" "F"文件
$b=new \B(); // \ 表示絕對路徑引用 全局空間中定義的類
$d=new \D();
$f=new \F();
index.php頁面
<?php namespace A; header("content-type:text/html;charset=utf-8"); use B\D, C\E as F; require 'test.php';//加載全局空間中定義的類 "B","D" "F"文件 $b=new \B(); // 創建定義在全局空間中的類 "B" 的一個對象 // 如果未發現,則嘗試自動裝載類 "B" $d=new \D(); // 創建定義在全局空間中的類 "D" 的一個對象 // 如果未發現,則嘗試自動裝載類 "D" $f=new \F(); // 創建定義在全局空間中的類 "F" 的一個對象 // 如果未發現,則嘗試自動裝載類 "F" echo $b->name; echo '<br/>'; echo $d->name; echo '<br/>'; echo $f->name; ?>
test.php頁面(全局空間中定義的類 "B","D" "F"的頁面)
<?php class B{ public $name='全局空間的類B'; } class D{ public $name='全局空間的類D'; } class F{ public $name='全局空間的類F'; } ?>
結果為
全局空間的類B 全局空間的類D 全局空間的類F
附錄
<?php namespace A; use B\D, C\E as F; // 函數調用 foo(); // 首先嘗試調用定義在命名空間"A"中的函數foo() // 再嘗試調用全局函數 "foo" \foo(); // 調用全局空間函數 "foo" my\foo(); // 調用定義在命名空間"A\my"中函數 "foo" F(); // 首先嘗試調用定義在命名空間"A"中的函數 "F" // 再嘗試調用全局函數 "F" // 類引用 new B(); // 創建命名空間 "A" 中定義的類 "B" 的一個對象 // 如果未找到,則嘗試自動裝載類 "A\B" new D(); // 使用導入規則,創建命名空間 "B" 中定義的類 "D" 的一個對象 // 如果未找到,則嘗試自動裝載類 "B\D" new F(); // 使用導入規則,創建命名空間 "C" 中定義的類 "E" 的一個對象 // 如果未找到,則嘗試自動裝載類 "C\E" new \B(); // 創建定義在全局空間中的類 "B" 的一個對象 // 如果未發現,則嘗試自動裝載類 "B" new \D(); // 創建定義在全局空間中的類 "D" 的一個對象 // 如果未發現,則嘗試自動裝載類 "D" new \F(); // 創建定義在全局空間中的類 "F" 的一個對象 // 如果未發現,則嘗試自動裝載類 "F" // 調用另一個命名空間中的靜態方法或命名空間函數 B\foo(); // 調用命名空間 "A\B" 中函數 "foo" B::foo(); // 調用命名空間 "A" 中定義的類 "B" 的 "foo" 方法 // 如果未找到類 "A\B" ,則嘗試自動裝載類 "A\B" D::foo(); // 使用導入規則,調用命名空間 "B" 中定義的類 "D" 的 "foo" 方法 // 如果類 "B\D" 未找到,則嘗試自動裝載類 "B\D" \B\foo(); // 調用命名空間 "B" 中的函數 "foo" \B::foo(); // 調用全局空間中的類 "B" 的 "foo" 方法 // 如果類 "B" 未找到,則嘗試自動裝載類 "B" // 當前命名空間中的靜態方法或函數 A\B::foo(); // 調用命名空間 "A\A" 中定義的類 "B" 的 "foo" 方法 // 如果類 "A\A\B" 未找到,則嘗試自動裝載類 "A\A\B" \A\B::foo(); // 調用命名空間 "A\B" 中定義的類 "B" 的 "foo" 方法 // 如果類 "A\B" 未找到,則嘗試自動裝載類 "A\B" ?>
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。