- ベストアンサー
PHPのセグメンテーション違反に対する例外処理について
- PHPのセグメンテーション違反に対する例外処理について
- 再帰呼び出しのプログラムを作成し、Linuxのシェルで実行した結果、セグメンテーション違反が発生しました。例外処理をすることはできないのか、方法を教えてください。
- セグメンテーション違反に対して例外処理をすることはできないのでしょうか。できるとすれば、どのように記述をすればよいでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
PHPプログラムレベルの例外ではなくて、PHP自体が異常終了してしまっているのだと思いますので、PHPプログラム内で捕まえることは不可能です。 他の言語では、スタックの不足を事前検知して、プログラム内で例外を上げるものもあるようですが、PHPはスタックの不足を事前検知せず、不足した時点でPHPがこけるという事でしょう。
その他の回答 (1)
- yuu_x
- ベストアンサー率52% (106/202)
スクリプト言語である PHP の場合では、あまり興味ない話ですね。 > ※何回目でセグメンテーション違反が発生するかは、 その都度異なります。 そらそうでしょ、注目すべきはネストの深さでなく、食いつぶしてる容量。 変数増やせばもっと早く落ちる。 容量や実行時間のリミットってセットしてますか? 最悪の事態に備えて、わざわざリミットまで用意してくれている。なんて親切な言語なんだろう。(リミットに頼り切るのもどうかと思うけど) ちなみに try/catch は throw された例外を捕まえるためのもので、オブジェクト指向信者(皮肉が過ぎるか)のために PHP5 から導入された。 スクリプト言語でどうなんだろうねぇって思うけどね。finally ないし。 古くは、エラー処理のため set_error_handler などなど用意してくれている。もちろん、メモリが食いつぶされた状態ではどうしようも無いけど。 global なんて書くコードもいい加減うんざりだ。
お礼
あまり興味のないお話しに付き合って頂き、ありがとうございます。 こちらで提示したプログラムは意図的にエラーを発生させるために書いたものであると考えて頂ければと思います。 No1さんの解答へのお礼でも書きましたが、どうしようもなさそうですね。set_error_handler関数を使っても同様でしょう。
お礼
ご回答ありがとうございます。 PHPがインタプリタ型の言語であり、逐次実行することを考えると、確かにどうしようもなさそうですね。