求教PHP中关于命名空间和继承的问题

aktang
  • 13

有如下的目录结构

/-AA.php
|-Test/
    |- BB.php
    |- BB/
        |-CC.php

CC.php

namespace Test\BB;
class CC{
    public function show(){
        echo __CLASS__;
    }
}

BB.php

namespace Test;
class BB{
    public function show(){
        echo __CLASS__;
    }
}

AA.php

function autoload($class){
    $file = str_replace('\\', DIRECTORY_SEPARATOR, $class);
    include_once $file . '.php';
}
spl_autoload_register(__NAMESPACE__ . '\\autoload');
$obj1 = new Test\BB;
$obj1 -> show();  //输出:Test\BB
$obj2 = new Test\BB\CC;
$obj2 -> show();  //输出:Test\BB\CC

当将类 CC 改成继承自类 BB 时
CC.php

namespace Test\BB;
class CC extends BB{
    public function show(){
        echo __CLASS__;
    }
}

类的自动加载出现异常,文件引入异常:

Warning: include_once(Test/BB/BB.php):

求教是什么原因导致?该如何修改实现继承?

回复
阅读 501
1 个回答
✓ 已被采纳

BB.PHP文件所在的目录是Test,命名空间是Test,而你在Test/BB/目录下找BB.PHP自然是报找不到。需要改成

namespace Test\BB;
use Test\BB;

class CC extends BB{
    public function show(){
        echo __CLASS__;
    }
}
宣传栏