从在内部调用的子类扩展父类

时间:2019-05-13 07:21:28

标签: php

我下面有这段代码,可以简单地从单独的php文件中加载一个类,该文件应扩展父类Loader

父班

namespace Loader;

class Loader{
    public function load($name){

        $module_name = ucfirst($name);
        require_once(__DIR__.'/'.$module_name.'.php');

        return new $module_name;
    }
    public function parentFunction(){
       return get_class($this);
    }
}

$loader = new Loader;

Captcha.php

namespace Loader;

class Captcha extends Loader{
    public function callParentFunction(){
        var_dump($this->parentFunction());
    }
}

然后通过test.php从Loader调用验证码

require_once(__DIR__.'/Loader.php');

$loader->load('captcha')->callParentFunction();

它引发了这个错误:

  

致命错误:找不到“加载程序”类

指向此行

class Captcha extends Loader{

有什么帮助,建议吗?

1 个答案:

答案 0 :(得分:0)

特定错误意味着您可能在其他一些不使用命名空间并被加载的文件中还有其他class Captcha。在某个地方,您将弄混此类的两个不同实现。

问题在于您的验证码类没有被称为Captcha,而是被称为Loader\Captcha。由于您是从字符串实例化的,因此该字符串需要包含类的完全限定名称。当前,您的代码正在寻找一个名为Captcha而不是Loader\Captcha的类。

要么做$loader->load('Loader\Captcha')并以某种方式在内部对名称空间进行排序,要么在内部添加名称空间:

$module_name = ucfirst($name);
$class = __NAMESPACE__ . '\\' . $module_name;
require_once __DIR__ . '/' . $module_name . '.php';
return new $class;

同样,由于我看不到您的文件,因此这仍然无法解决文件中的内容问题。