LoginSignup
13
3

More than 3 years have passed since last update.

PHP の RAII は幻想じゃなくなった

Posted at

だいぶ前にこんな記事を書いていましたけど、

どうやら PHP 7.4 では zend.exception_ignore_args なるオプションが増えたらしく幻想ではなくなったようです。

PHP 7.3 以前では SplFileObject のインスタンスが bar で発生した例外に掴まれて main まで飛んでいくので foo のスコープを抜けてもファイルは閉じられませんでした。

しかし PHP 7.4 で zend.exception_ignore_args を有効にしておけば例外によって関数の引数が掴まれることがないので、bar で発生した例外に SplFileObject のインスタンスが掴まれることはなく、foo のスコープを抜ければファイルは閉じられます。

以前社内で、例外がログられるときにスタックトレースの引数にセンシティブな情報があるとやばいのでそのたぐいの情報はリクエストから取り出した直後にオブジェクトか何かでラップした方が良いのだろうか、とか話題になったんですけど(このとき)、それもこれで一緒に解決できるということですね(むしろそっちが zend.exception_ignore_args の本来の目的ですね)。

PHP 7.3 以前だと #0 /in/F9nc9(9): f('ore no himitu') のように引数が出力されてしまってますけど、PHP 7.4 で zend.exception_ignore_args が有効なら #0 /in/F9nc9(9): f() のように引数は現れません。

13
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
3