PHP默认的spl autoload函数不会在命名空间中加载类的父类

时间:2016-11-22 03:04:57

标签: php class namespaces parent autoload

我无法在命名空间中自动加载类的父级。没有继承子类加载;但是孩子不能自动加载父类。

文件结构:

/index.php
/lib/router.php
/lib/ns1/parent1.php
/lib/ns1/child1.php

的index.php:

spl_autoload_extensions(".php");
spl_autoload_register();
require '/lib/router.php';

/lib/router.php

$child1 = new ns1\child1();

/lib/ns1/child1.php

namespace ns1;
class child1 extends parent1 {}

/lib/ns1/parent1.php

namespace ns1;
class parent1 { function __construct() {} }

当我删除"延伸"来自child1的部分一切都很好。 随着"延伸"部分我有错误:

  

致命错误:spl_autoload():无法在/lib/ns1/child1.php中加载类parent1 \ child1

有没有办法使用内置的默认spl自动加载功能? 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我在这个答案中找到了对我有用的解决方案 https://stackoverflow.com/a/7987085/5208203

只需将set_include_path()添加到文件index.php:

set_include_path(get_include_path().PATH_SEPARATOR."/lib");
spl_autoload_extensions(".php");
spl_autoload_register();
require '/lib/router.php';

但我不确定性能,可能只是解决了我在课堂定义中遇到的其他失败......