【发布时间】:2018-04-14 21:54:24
【问题描述】:
我已经为此奋斗了一段时间,但无法弄清楚,也许其他人有或者也许这里有 Slim、PHP、Apache 等更深层次的问题。在工作了几个小时后,我的 Slim 安装将开始在所有路线上提供这个:
致命错误:Slim\Collection 类包含 1 个抽象方法,因此必须声明为抽象方法或实现 F:\Projects\example\server\vendor\slim\slim\Slim\Collection 中的剩余方法 (IteratorAggregate::getIterator) .php 在第 21 行
如果我重新启动 Apache,这个问题就会消失。 (反正几个小时。)
我发现两年前有人遇到过类似的问题,而帮助他们的人根本没有真正帮助他们:https://community.apachefriends.org/viewtopic.php?p=250966&sid=96ef58aaeb7fe142a7dcdfd506a8683f
我已尝试彻底清除并安装我的作曲家供应商目录。这不能解决问题。我可以清楚地看到getIterator在错误消息中的文件中按预期实现了。
PHP 版本 7.0.12、Windows 7、x86 PHP 构建
几个小时后又发生了,出现了不同但相似的错误消息:
致命错误:Pimple\Container 类包含 1 个抽象方法,因此必须声明为抽象方法或实现 F:\Projects\example\server\vendor\pimple\pimple\src\Pimple 中的剩余方法 (ArrayAccess::sqlserver) \Container.php 第 34 行
这个问题有一个类似的问题,并通过重新启动 PHP 来“解决”它,但这显然不是一个实际的解决方案,而且我没有启用 opcache: PHP 7, Symfony 3: Fatal error 1 abstract method and must therefore be declared abstract or implement the remaining methods
有什么猜测吗?请记住:此消息位于我未编写的文件中,并在 Apache 重新启动时消失。 PHP 7 是否有一些缓存会导致这种情况?
编辑 3/10/17:
是的,我已经用 Slim 开了一张票。我还在一个非超薄文件(Pimple)中看到它,所以我认为这不是一个超薄问题。 https://github.com/slimphp/Slim/issues/2160
正如我所说,我的 opcache 已关闭。我已经在 php.ini 文件和查看 phpinfo() 中确认了这一点。
【问题讨论】:
-
我已经尝试更新到 PHP 7.1,但仍然每天一次,强制重启 apache。
-
这与我的问题类似:phabricator.wikimedia.org/T152502
-
我没有使用 slim 的经验,所以这是问题文件吗? github.com/slimphp/Slim-Http/blob/master/src/Collection.php 如果没有,那你能发布代码吗?您是否尝试过联系框架的维护者?
-
你能用小提琴重新创建场景吗?令我惊讶的是,apache 重新启动解决了这个问题,因为您提到 Opcache 无论如何都被禁用了。如果从 cli 构造类 100% 的时间有效并且缓存被禁用。然后,您需要查看代码。此外,您是否 100% 确定您没有另一个名为“Container”的类位于不同的命名空间中,并且它不会在某些条件下尝试实例化错误的类?
-
这不是我可以放入 jsfiddle 或类似的东西。问题在于现有的标准库,并且代码很好。 (正如重新启动修复问题所证明的那样。)令人发指的是,问题已经消失了,但我不知道为什么或是否会再次出现。很沮丧。如果您在这里希望得到解决方案,请发表评论以保持此线程活跃。