NULL のオブジェクトからプロパティにアクセスしようとすると、PHP が例外をスローしないことに気付きました。これは正しいです?他の言語と同様に、何らかのエラーが発生すると予想されます。
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
エラーを報告し、より正確になるように通知します
<?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!
PHP 通知警告が表示されるはずです。これは次のようになります。
PHP Notice: Trying to get property of non-object in [...]
そうでない場合は、エラー設定を確認する必要があります。開発中に設定してみる
error_reporting(-1);
コードを可能な限り修正できるように、すべての PHP エラー/警告/通知を確認するため。
例外処理はバージョン 5 以降に導入されており、すべての組み込み関数に実装されているわけではありません。
例外を取得したい場合は、変数が null であるかオブジェクトではないかをいつでも確認し、catch ブロックで処理できるカスタム例外をスローできます。
エラー、警告、および通知を取得するには、PHP.ini ファイルの開発バージョンを使用できます。または単に php.ini ファイルを検索し、その中のError handling and logging
セクションを探して に設定error_reporting
しE_ALL
、を検索してdisplay_errors
に設定しon
ます。次に、設定を有効にするために Web サーバーを再起動します。