在“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”之后找不到类的主要内容,如果未能解决你的问题,请参考以下文章