我在PHP 5.4.10中使用MAMP,我遇到以下MWE的问题:
<?php
trait T {
public function hello() { echo 'hello'; }
}
class A {
use T;
}
$a = new A();
$a->hello();
?>
页面在第一次加载时显示“hello”。但是,当我点击刷新时,我得到一个错误500.
如果我修改文件(例如在某处添加一个空行)并再次刷新,'hello'会再次出现。再次点击刷新,错误500又回来了。
这可能来自哪里?
更新
这显示在PHP错误日志中(Apache错误日志中没有任何内容):PHP Fatal error: Call to undefined method A::0?
()
(重复操作时0
并不总是具有相同的名称。)
答案 0 :(得分:1)
Xcache可能是这里的问题,尝试关闭缓存(或至少xcache)并再次尝试
答案 1 :(得分:0)
我遇到了同样的问题,感谢@Leon Weemen,我专注于XCache。我发现this bug(在XCache 3.0.1中修复)正是导致问题的原因(我的XCache版本是2.0.0)。他们建议你在php.ini中设置以下值来解决问题;
xcache.mmap_path = "/tmp/xcache"
xcache.readonly_protection = on
但是,这种解决方法并不能解决我的问题。我能够禁用XCache的唯一方法是使用ini_set()
PHP方法。我应用程序最开始的以下片段解决了这个问题,并且一旦更新就准备好使用XCache:
try{
$xCache = new ReflectionExtension('xcache');
if(version_compare($xCache->getVersion(), '3.0.1', '<')){
ini_set('xcache.cacher', 0);
}
} catch(ReflectionException $e){
// xCache not installed - everything should work fine
}