无限投掷构造函数

时间:2010-05-14 19:36:31

标签: php

这样的php脚本会发生什么?

class FooException extends Exception
{

    public function __construct() {
        throw new FooException;
    }
}

可能与

相同
while (TRUE) {
    new Exception();
}

超出执行时间只是超时,或者因为某些致命错误而失败?

3 个答案:

答案 0 :(得分:2)

在第一种情况下没有任何反应,因为你永远不会构造异常。

在第二种情况下,不会抛出异常,因此您只能得到一个普通的无限循环。

但是,如果您通过在末尾添加此行来修改第一个示例:

throw new FooException();

它会导致无限循环,最终消耗所有内存:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 44 bytes)

答案 1 :(得分:1)

我在PHP 5.2.8上尝试过(最后添加new FooException();)并且内存不足:

  

致命错误:第5行上允许的内存大小为134217728字节(尝试分配40个字节)

答案 2 :(得分:0)

你可以测试它,但我认为当你抛出异常并且已经抛出异常时它会抛出一个致命的错误。

编辑:好的,我很困惑。你在这里得到了一个内存不足的致命错误:

class FooException extends Exception
{

    public function __construct() {
        throw new FooException;
    }
}

throw new FooException();

在异常处理程序中抛出异常时,我所描述的内容会发生。