2013-02-25 2 views
10

以下はPHP 5.3では動作しますが、PHP 5.4.10では動作しません。バージョン5.4.10でPHPの例外に対する態度が変更されましたか?

throw new Custom_Exception(); 

class Custom_Exception extends Exception {} 

PHP 5.4.10は、次の致命的なエラーで応答します:

Class 'Custom_Exception' not found in ...

誰もがなぜ知っていますか?

p.s.クラス定義をスローステートメントの上に移動すると、それが修正されます。

+0

@nathanhayfield、いいえ、それは 'スロー 'でしか起こりません。 –

+1

バグかもしれないが、 '5.4.9'と' 5.5-dev'の両方で動作します:http://codepad.viper-7.com/XTloFa – Niko

+1

@Niko、次のサービスによると、5.4.10で動作しますいずれか、それはしません - http://sandbox.onlinephpfunctions.com/。あなたは実際のマシンでそれをテストしましたか? –

答えて

-3

私はあなたがそれを呼び出す前にchildclassのCustom_Exception()を作成する必要がありますので、その逆

class Custom_Exception extends Exception {} 

throw new Custom_Exception(); 

すると仮定だと思います。

+0

確かに、しかし、なぜですか... –

+0

私はかなり確信していませんが、それはエコー$ストリングを言って好きではありません。 $ string = "Hello World"を入力します。 2行目? – Richie

+2

これは間違っています。クラス宣言は、ファイル内のどこにでもできるはずです。 –

1

私はtest.phpをというファイルにコードを入れて、私は実行するとphp-5.4.10

をダウンロード:

php -c php.ini-development -f test.php 

私は次の出力を参照してください。

PHP Fatal error: Uncaught exception 'Custom_Exception' in test.php:3 
Stack trace: 
#0 {main} 
    thrown in test.php on line 3 

Fatal error: Uncaught exception 'Custom_Exception' in test.php:3 
Stack trace: 
#0 {main} 
    thrown in test.php on line 3 

私はあなたを信じて構成上の問題があります。コマンドラインからテストしていますか?

編集:私はまた、両方のバージョンのzend_compile.cでdo_bind_inherited_class比べ

zend_compile.c from 5.3

zend_compile.c from 5.4.10

彼らは唯一の特性のためのサポートを追加したように見えます。

私の答えは:いいえ、態度が変わったとは思いません。

+0

これはコメントです。また、単純にhttp://3v4l.org/XaECZ –

+0

に要約することができます。@ジャック:私が自分の答えを投稿する前に、私はそのサイトを探していた、ありがとう!私は私の答えだと思う、私は同じバージョンをテストした最初の人であると思われ、またOPによって提起された質問に答えた唯一の人でもある。 (いいえ、態度は変わっていません) – Martin

+0

公正であるために、質問に対する「回答」はすでに[このコメント]で与えられています(http://stackoverflow.com/questions/15078219/has-phps-attitude-towards-例外 - バージョン内変更 - 5-4-10/16827225?noredirect = 1#comment21206563_15078219)。また、それは*なぜ*これはOPのためにのみ起こる(そうそう)答えていない。 –

関連する問題