据个人理解,用到所需要的类时,需要先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();