一、namespace命名空间
1、what?
php 5.3之后添加的新特性,用于表明一个文件的范围
2.why?
为了解决在同一个文件引入多个文件时,类名重复报错问题。比如,test_1.php里有个test类,test_2.php文件里也有一个test类,如果一个文件同时引入了这两个文件时,在PHP 5.2版本以前就会报错,那么,大家的做法就是把相应重名类改为不重名类,方可使用,但是一旦项目非常大,文件非常多的时候,显然是这不利于管理的,于是引入了namespace这个概念,用来圈定相同名字的类属于不同的区域。
3.example?
场景一:未使用namespace
#demo/test_1/test_1.php
<?php
class test{
public function test() {
echo __METHOD__;
}
}
#demo/test_2/test_2.php
<?php
class test{
public function test() {
echo __METHOD__;
}
}
#demo/demo.php
<?php
include 'test_1.php';
include 'test_2.php';
###报错:Cannot redeclare class test inD:\project\demo\test_2\test_2.phpon line2
#对test_1.php 和test_2.php分别添加命名空间:
namespace test_1;
namespace test_2;
#再访问demo.php就不会报错了,因为重名的test类已经分属于两个不同的区域了
#那么,如何使用命名空间?在demo.php 中添加如下代码:
$test_1 = new test_1\test();
echo $test_1->test();
echo '<br>';
$test_2 = new test_2\test();
echo $test_2->test();
#在demo文件中想要使用带有命名空间的文件时,必须是 “命名空间\类” 这样去使用