在 PHP 中用 __call() 模拟类时出现分段错误



我试图模拟一个使用魔法方法__call()的类。

运行测试时,出现"分段错误"

这是一个非常简单的类,它将调用转发到其成员对象上的方法。我认为这与使用 __call() 有关,因为当我删除它时测试通过。

我正在使用PHP 5.3.3(CentOS 6.5)和PHPunit 4.6

请参阅代码:

<?php
use Mockery as m;
class HasRoleTest extends PHPUnit_Framework_TestCase
{
    public function tearDown()
    {
        m::close();
    }
    function testFoo()
    {
        $foo = m::mock('Foo')->makePartial();
        $this->assertEquals('bar', $foo->bar());
    }
}
class Foo
{
    public function __call($name, $arguments)
    {
        if ($name == 'bar')
            return 'bar';
        return 'something else';
    }
}

在嘲弄1.0.0-alpha之前,使用__call魔术方法的对象可能导致无限递归,这反过来又会导致 PHP 中的段错误。

例如,请参阅以下问题:

  • https://github.com/mockery/mockery/issues/564
  • https://github.com/mockery/mockery/issues/461
  • https://github.com/mockery/mockery/issues/777

这似乎是自嘲1.0.0-alpha起已修复的错误。

最新更新