关于命名空间
先写两个文件
a.php
1 <?php 2 class apple { 3 function get_info() { 4 echo "this is A apple"; 5 } 6 }
b.php
1 <?php 2 class apple { 3 function get_info() { 4 echo "this is A apple"; 5 } 6 }
然后我在index.php中引用这两个文件
1 <?php 2 require_once('a.php'); 3 require_once('b.php'); 4 5 $apple = new apple(); 6 $apple->get_info();
因为a.php和b.php都包含了class apple这个类,index.php调用apple这个类的时候就会出现问题:
1 Fatal error: Cannot redeclare class apple in D:\phpStudy\WWW\namespace\b.php on line 3
这时候就需要使用到namespace了,在a.php和b.php分别加上namespace
a.php
1 <?php 2 namespace a\b\c; 3 class apple { 4 function get_info() { 5 echo "this is A apple"; 6 } 7 }
b.php
1 namespace d\e\f; 2 class apple{ 3 function get_info() { 4 echo "this is B apple"; 5 } 6 }
然后在index.php中调用时(使用use表示使用该命名空间中的apple)
1 <?php 2 require_once('a.php'); 3 require_once('b.php'); 4 5 use a\b\c\apple; 6 7 $apple = new apple(); 8 $apple->get_info();
这时浏览器输出:
1 this is A apple
如果我们使用两个use呢?
1 <?php 2 require_once('a.php'); 3 require_once('b.php'); 4 5 use a\b\c\apple; 6 use d\e\f\apple ; 7 8 $apple = new apple(); 9 $apple->get_info(); 10 11 echo "<br>"; 12 13 $bapple = new apple(); 14 $bapple->get_info();
浏览器输出:
Fatal error: Cannot use d\e\f\apple as apple because the name is already in use in D:\phpStudy\WWW\namespace\index.php on line 6
也就是在引用apple这个类的时候,有两个apple,虽然是申明了命名空间,但引用的时候就不知道到底使用的是哪个,
这时就需要使用别名了(使用as来命名别名);
1 <?php 2 require_once('a.php'); 3 require_once('b.php'); 4 5 use a\b\c\apple; 6 use d\e\f\apple as Bapple ; 7 8 $apple = new apple(); 9 $apple->get_info(); 10 11 echo "<br>"; 12 13 $bapple = new Bapple(); 14 $bapple->get_info();
浏览器输出:
this is A apple
this is B apple
这时我们新建c.php,并且不给命名空间
1 <?php 2 class apple{ 3 function get_info(){ 4 echo "this is c apple"; 5 } 6 }
然后在index.php中:
1 <?php 2 require_once('a.php'); 3 require_once('b.php'); 4 require_once('c.php'); 5 6 use a\b\c\apple; 7 use d\e\f\apple as Bapple ; 8 9 $apple = new apple(); 10 $apple->get_info(); 11 12 echo "<br>"; 13 14 $bapple = new Bapple(); 15 $bapple->get_info(); 16 17 echo "<br>"; 18 19 $capple = new \apple(); 20 $capple->get_info();
直接在$capple引用c.php中的apple时,前面加上\符号即可,表示全局类。
输出:
this is A apple
this is B apple
this is c apple
【推荐】AI 的力量,开发者的翅膀:欢迎使用 AI 原生开发工具 TRAE
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
· AES 加密模式演进:从 ECB、CBC 到 GCM 的 C# 深度实践
· InnoDB为什么不用跳表,Redis为什么不用B+树?
· 记一次 C# 平台调用中因非托管 union 类型导致的内存访问越界
· [EF Core]聊聊“复合”属性
· 那些被推迟的 C# 14 特性及其背后的故事
· 博客园出海记-开篇:扬帆启航
· 关于布尔类型的变量不要加 is 前缀,被网友们吐槽了,特来完善下
· 技术人日常避坑手册:高效工作,少踩坑
· C#中的多级缓存架构设计与实现深度解析
· 30 岁 Java 仍在 “霸榜“:开发者凭什么还在为它熬夜?