1

考虑以下 PHP 类:

class someObject {
    public function broken(){
        return isset($this->something()) ? 'worked' : 'didnt';
    }

    public function something(){
        return true;
    }

    public function notBroken(){
        print('worked');
    }
}

假设我现在这样做:

$obj= new someObject();
$obj->broken();

考虑到您不能将函数调用传递给 isset(),(它是通过引用),我希望这会失败并出现致命错误:PHP Fatal error: Can't use method return value in write context这很好,并且可以预期。

但是,假设我现在这样做:

$obj= new someObject();
$obj->notBroken();

考虑到我broken()在这次执行中没有碰到任何地方,并且错误broken()是致命错误(而不是 Parse 错误),我不希望正常输出“工作”。错误的!它仍然会产生致命错误。

问题:

除了不编写有错误的代码之外,还有其他不是解析错误但仍会触发运行时错误的错误吗?我只知道:PHP Fatal error: Can't use method return value in write context。有没有办法检测这些错误?这种类型的错误有一个特殊的名称吗?

4

2 回答 2

1

这种特定行为的原因可能isset()是一种语言结构,而不是在运行时被解释的普通函数。所以按理说这是一种解析错误。

不过我对此没有深入的了解,也不知道这类错误是否有特定的名称。

于 2010-08-09T18:19:57.140 回答
0

这些是“编译错误”,由编译器在遇到语法上有效但“不可编译”的构造时抛出。转到http://svn.php.net/viewvc/php/php-src/trunk/Zend/zend_compile.c并搜索“E_COMPILE_ERROR” - 有很多。

于 2011-08-19T06:31:41.087 回答