PHP Trait方法仅适用于首次加载

时间:2013-05-19 14:38:27

标签: php traits

我在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并不总是具有相同的名称。)

2 个答案:

答案 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
}