PHP的命名空间的用法
课程名称重复。
假设有A.php和B.php两个文件,这些文件中分别定义了Human类和run方法。
<?php
class Human{
public function run(){
return 'run';
}
}
<?php
class Human{
public function run(){
return 'run';
}
}
读取这两个文件,并创建Human类的实例,然后执行run方法。
<?php
require_once 'A.php';
require_once 'B.php';
$human = new Human();
echo $human->run().'\n';
发生了致命错误:不能声明类Human,因为该名称已在…/B.php的第3行中使用
导致这一情况的因素是什么?
- A.php,B.phpで同じクラスを定義していて、名前が重複しているから。
错误解决
- A.php、B.phpにnamespace xxx;を追加
<?php
namespace A1; //これを追加した
class Human{
public function run(){
return 'a1 run';
}
}
<?php
namespace B1; //これを追加した
class Human{
public function run(){
return 'b1 run';
}
}
与之前相同,读取这两个文件并生成Human类的实例,然后执行run方法。
<?php
require_once 'A.php';
require_once 'B.php';
$human = new A1\Human();
echo $human->run().'\n'; //「a1 run」と出力
$human = new B1\Human();
echo $human->run().'\n'; //「b1 run」と出力
在名为A1的命名空间中有一个属于Human类的对象,在名为B1的命名空间中也有一个属于Human类的对象,这样就可以区分它们,并且问题得到了解决。