PHP 命名空间 namespace 函数调用 类引用 详解
admin
2023-06-22 07:22:29
0

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页面

结果为

我是命名空间"A"中的函数foo()

2当前命名空间A下调用命名空间"A\my"中的函数foo()  语法 my\foo();

index.php页面

test.php页面(定义命名空间"A\my"的页面)

结果为

我是命名空间"A\my"中的函数foo()


3.当前命名空间A下调用命名空间 "A\B"的函数"foo"

语法 

require 'test.php';//加载命名空间 "A\B"的函数"foo"文件

B\foo();           

index.php页面

test.php页面(定义命名空间 "A\B"的函数"foo"的页面)

结果为

命名空间 "A\B" 中函数 "foo"


4.当前命名空间A下调用本命名空间 "A" 中定义的类 "B" 的 "foo" 静态方法

语法 

B::foo();           

index.php页面

结果为

命名空间 "A" 中定义的类 "B" 的 "foo" 方法


5.当前命名空间A下调用本命名空间 "B" 中定义的类 "D" 的 "foo" 静态方法

语法 

require 'test.php';   //加载文件

use B\D;                //引导类

D::foo();                //进行调用

index.php页面

test.php页面(定义命名空间 "B"的类"D"的函数"foo"的页面)

结果为

命名空间 "B" 中定义的类 "D" 的 "foo" 方法


6.当前命名空间A下调用命名空间 "B"的函数"foo"

语法 

require 'test.php';//加载命名空间 "B"的函数"foo"文件

\B\foo();           

index.php页面

test.php页面(定义命名空间 "B"的函数"foo"的页面)

结果为

命名空间 "B" 中函数 "foo"


7.当前命名空间A下调用全局空间 "B"的函数"foo"静态方法

语法 

require 'test.php';//加载全局空间 "B"的函数"foo"文件

\B::foo();           

index.php页面

test.php页面(定义全局空间 "B"的函数"foo"的页面)

结果为

全局空间的B类中foo方法


8.当前命名空间A下调用命名空间 "A\A"的B类"foo"静态方法

语法 

require 'test.php';//加载命名空间 "A\A"的B类"foo"静态方法文件

A\B::foo();           

index.php页面

test.php页面(定义命名空间 "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页面

test.php页面(定义命名空间 "A\B"的B类"foo"静态方法的页面)

结果为

命名空间A\B中B类的foo静态方法


类引用

1当前命名空间A下本空间类引用  语法 $b=new B();

index.php页面

name;

结果为

我是命名空间 "A" 中定义的类 "B" 的一个对象


2当前命名空间A下命名空间 "B" 中定义的类 "D"引用 

语法

use B\D        //导入命名空间B中的D类

$b=new D();

index.php页面

name;
?>

test.php页面(定义命名空间B中D类的页面)

结果为

命名空间B中D类


3当前命名空间A下命名空间 "C" 中定义的类 "E"引用 

语法

use C\E as F        //导入命名空间C中的E类  F为命名空间 "C" 中定义的类 "E"的别名

$b=new F();

index.php页面

name;
?>

test.php页面(定义命名空间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页面

name;
echo '
'; echo $d->name; echo '
'; echo $f->name; ?>

test.php页面(全局空间中定义的类 "B","D" "F"的页面)

结果为

全局空间的类B
全局空间的类D
全局空间的类F


附录



相关内容

热门资讯

特朗普威胁对三国发动进攻,伊朗... 在美伊尚未达成协议的背景下,特朗普又将矛头转向古巴和阿曼,接连发出强硬威胁,此举引发伊朗方面的嘲讽。...
敢当警察面施暴,不仅是非法代孕... 【文/观察者网专栏作者 关心】5月26日,大象新闻记者实地调查杭州临平区一涉嫌非法代孕窝点,非法窝点...
强强联手!他们探索“AI+高能... 北京市玉泉路北京正负电子对撞机园区附近的会议室,近两年每月都会召开一场特别的组会。会议桌的两边各坐着...
A股“人形机器人第一股”要来了... 人形机器人的火越烧越旺。 宇树科技正在冲刺“人形机器人第一股”;特斯拉人形机器人Optimus亮相波...
原创 路... 文/王新喜 路撑不住,养护成本暴增40%!电车太重让全民买单,车企该改变了。 新能源车发展到今天,已...
上海专业抖音代运营公司有哪些?... 洞察上海专业抖音代运营服务:口碑公司的多维选择 在短视频爆发式增长的时代,抖音已成为企业品牌传播的...
美伊再起冲突,欧盟外长直呼:局... 美军近日对伊朗目标实施了两次打击,中东局势再度陷入紧张。欧盟外长卡拉斯认为,美伊陷入了“似战非战”的...
美国牡蛎养殖场,走出一位特朗普... ·格雷厄姆·普拉特纳。(美国《POLITICO》杂志)一个能够激发基层热情,但也带有明显政治包袱的反...
校园科技节活动在阳江一中举办 5月27日,“探天问海,智创未来”2026年校园科技节系列活动在阳江一中举办。活动通过主题讲座、科普...
男子遛狗从不拴绳,撞死人后将狗... 近日,河北邯郸女子骑行被狗撞倒身亡一事,再度引发关注。5月27日,被撞身亡女子家属告诉中国新闻周刊,...