在“require_once”之后找不到类

Posted

技术标签:

【中文标题】在“require_once”之后找不到类【英文标题】:Class not found after "require_once" 【发布时间】:2019-04-26 07:23:01 【问题描述】:

我收到以下错误:

`Fatal error: Class 'DummyClass' not found in...`

<?php

 require_once("3rdparty/simplesaml/lib/_autoload.php");

 class login extends DummyClass  (this is the line the error refers to)

 [...]

 

?>

如果我将require_once 注释掉,它就可以正常工作。

DummyClass 是在外部定义的,可以在 prepend-file 中找到。 (我认为这个问题并不重要,因为如果我注释掉require_once,它会按预期工作)

文件的路径也应该正确,因为如果我更改路径,它会给我一个“需要打开失败...”错误。

我也尝试在 PHP 5.6 和 7 之间切换 - 没有区别。

所以,我想请你帮忙。您有任何提示/想法,为什么我可能会收到该错误?

【问题讨论】:

这听起来可能是命名空间的问题。 DummyClass 定义在哪个命名空间中,您的脚本现在在哪个命名空间中?如果DummyClass 在默认命名空间中,extends \DummyClass 有帮助吗? 另一件要问的问题 - 在包含 simplesaml 自动加载之前,您是否已经使用了自动加载功能? 是的,前置文件包含function __autoload($classname)\DummyClass 没有帮助。虽然,我只是想弄清楚名称空间。因为它是“DummyClass”背后的一个完整框架,所以要回显一些东西并不容易。 __NAMESPACE__ 不包含任何内容,无论是否包含有问题的行。 【参考方案1】:

问题解决了。

旧框架使用旧的__autoload 函数,该函数已被弃用。 SimpleSAMLPHP 使用了新功能。这些自动加载组合会导致其中一个覆盖另一个。

解决方案:

__autoload 切换到spl_autoload_register

类似问题:Override vendor autoload composer

【讨论】:

以上是关于在“require_once”之后找不到类的主要内容,如果未能解决你的问题,请参考以下文章

require_once() 找不到包含路径

包括通过 require_once() 找不到的文件

PHP致命错误:找不到类

有人可以指出为啥我的 require_once() 函数找不到路径吗? php

Yii 2:在require_once中使用一个类

运行java文件显示找不到或无法加载主类怎么解决?