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()が致命的なエラー (解析エラーではない) であることを考えると、「機能した」という通常の出力は期待できません。間違い!それでも致命的なエラーが発生します。

質問:

エラーのあるコードを書いていないこと以外に、解析エラーではないが実行時エラーを引き起こすエラーは他にありますか? 私が知っているのは次のことだけです: 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 に答える