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类的对象,这样就可以区分它们,并且问题得到了解决。

广告
将在 10 秒后关闭
bannerAds