据个人理解,用到所需要的类时,需要先require或include引入,所以会发生类重定义的错误的前提是:两个相同命名的类都有被引入。目前有些php框架会自动加载(即include)所有新建的model类,所以为了避免你新建的model类和项目框架原生的核心类发生重名冲突,采用了namespace。
首先若引入两个相同的类则会显示:Fatal error: Cannot redeclare class Box in D:\wamp\www\namespace\B.php on line 3,
报错,现在则需要加入namespace,让系统区分两个类文件。
首先这是A.php文件
<?php
namespace a\b;
class Box{
public function get_Userinfo(){
echo "this is A";
}
}
这个为B.php文件
<?php
namespace a\c;
class Box{
public function get_Userinfo(){
echo "this is B";
}
}
两个类名相同则使用不同的命名空间,并使用use用于缩短命名空间
require_once("./A.php");
require_once("./B.php");
use a\b\Box;
use a\c\Box as BBox;
$a = new Box();
$a->get_Userinfo();
echo "<br/>";
$b = new BBox();
$b->get_Userinfo();
没有定义命名空间,就理解为使用顶级命名空间。new类时,可以在类前加上反斜杠\,也可以不加。
<?php
class Box{
public function get_Userinfo(){
echo "this is C";
}
}
<?php
c = new \Box();
$c->get_Userinfo();
本文探讨了在PHP中如何使用命名空间(namespace)来避免因类名重复导致的类重定义错误。通过实例演示了如何定义不同命名空间下的同名类,并利用use语句进行引用,有效解决了类名冲突问题。

1313

被折叠的 条评论
为什么被折叠?



