2

NULL のオブジェクトからプロパティにアクセスしようとすると、PHP が例外をスローしないことに気付きました。これは正しいです?他の言語と同様に、何らかのエラーが発生すると予想されます。

4

4 に答える 4

4

いいえ、未定義のメンバーにアクセスするための警告です。必要に応じて、 __get()マジック関数を使用して手動でクラスに例外を追加できます。

class foo {

    public function __get( $name )
    {
        throw new Exception($name . ' does not exist in foo');
    }       
}

これで、クラスは期待どおりに動作します。

$bar = new foo();
$x =  $bar->something;

エコーアウト:

Fatal error: Uncaught exception 'Exception' with message 'something does not exist in foo' in C:\web\xampp\htdocs\stupid2.php:7 Stack trace: #0 C:\web\xampp\htdocs\stupid2.php(14): foo->__get('something') #1 {main} thrown in C:\web\xampp\htdocs\test.php on line 7
于 2012-11-17T16:23:19.290 に答える
1

エラーを報告し、より正確になるように通知します

<?php

error_reporting(-1);

$var = null;
$var->prop;

echo 'Hello!';

結果:

Notice: Trying to get property of non-object in /..../prog.php on line 6
Hello!
于 2012-11-17T16:17:33.967 に答える
1

PHP 通知警告が表示されるはずです。これは次のようになります。

PHP Notice:  Trying to get property of non-object in [...]

そうでない場合は、エラー設定を確認する必要があります。開発中に設定してみる

error_reporting(-1);

コードを可能な限り修正できるように、すべての PHP エラー/警告/通知を確認するため。

于 2012-11-17T16:18:29.813 に答える
0

例外処理はバージョン 5 以降に導入されており、すべての組み込み関数に実装されているわけではありません。
例外を取得したい場合は、変数が null であるかオブジェクトではないかをいつでも確認し、catch ブロックで処理できるカスタム例外をスローできます。

エラー、警告、および通知を取得するには、PHP.ini ファイルの開発バージョンを使用できます。または単に php.ini ファイルを検索し、その中のError handling and loggingセクションを探して に設定error_reportingE_ALL、を検索してdisplay_errorsに設定しonます。次に、設定を有効にするために Web サーバーを再起動します。

于 2012-11-17T16:34:31.947 に答える