[PHP-users 35297] Re: デストラクタ内の例外処理
komura
komura.db2r1e @ gmail.com
2010年 7月 15日 (木) 21:53:36 JST
komura です。
On Thu, 15 Jul 2010 02:01:30 +0900
goto <gotou1213 @ gmail.com> wrote:
> PHP 5.3.2で下記のコードを実行したときに
> ______________________________________
> <?php
> class aaa
> {
> public function __destruct()
> {
> try
> {
> // (1)
> throw new Exception(__CLASS__);
> }
> catch(Exception $ex)
> {
> // (2)
> echo __LINE__.": $ex\n\n";
> }
> }
> }
>
> function bbb()
> {
> $a = new aaa();
> // (3)
> throw new Exception(__FUNCTION__);
> }
>
> function ccc()
> {
> try
> {
> bbb();
> // (4)
> echo __LINE__.": XXX\n\n";
> }
> catch(Exception $ex)
> {
> // (5)
> echo __LINE__.": $ex\n\n";
> }
> }
>
> ccc();
> ______________________________________
>
>
> (3)で投げた例外を(5)でcatchすることを期待しているのですが、
> 実際には(4)のechoが実行されます。
詳しく調べたわけではないのですが、バグだと思います。
PHP 5.3.3RC2 で試してみたところ、以下のような結果になりました。
--------------------------------------------------------------------------
14: exception 'Exception' with message 'bbb' in /home/komura/ex.php:23
Stack trace:
#0 /home/komura/ex.php(30): bbb()
#1 /home/komura/ex.php(41): ccc()
#2 {main}
Next exception 'Exception' with message 'aaa' in /home/komura/ex.php:9
Stack trace:
#0 /home/komura/ex.php(30): aaa->__destruct()
#1 /home/komura/ex.php(30): bbb()
#2 /home/komura/ex.php(41): ccc()
#3 {main}
37: exception 'Exception' with message 'bbb' in /home/komura/ex.php:23
Stack trace:
#0 /home/komura/ex.php(30): bbb()
#1 /home/komura/ex.php(41): ccc()
#2 {main}
--------------------------------------------------------------------------
(4) の echo は実行されませんでした。ただ、(3) で投げた例外が、(2) と (5)
の両方で補足されているため、修正されたわけではないと思います。
PHP 5.3.2 公開後にデストラクタや例外に関連する修正がありましたので、その
影響だと思います。もし、この挙動が気になるようでしたら、バグ報告する
ことをお勧めします。
--
komura <komura.db2r1e @ gmail.com>
PHP-users メーリングリストの案内