PHP に限らず他の言語でも言われていることですが、クラスのコンストラクタで例外を投げるような構造を取らざるを得ない場合、気をつけて置かなければならないことがあります。
例外の発生によってコンストラクタでの処理が中断され、インスタンスが生成されなかった場合、そのクラスのデストラクタは実行されません。
<?php class Sample { function __construct(){ throw new Exception("error"); } function __destruct(){ echo "destruct"; } } try { $sample = new Sample(); } catch (Exception $e){ echo $e->getMessage(); }
生成に失敗したインスタンス変数は NULL のままになってしまうので、コンストラクタで利用した通信の切断やロックの解除をデストラクタやクラスメソッドから行うことはできなくなります。
コンストラクタ内で例外を投げる場合は、エラー発生時の終了処理を完結させた後でスローしたほうが良さそうです。
Similar Posts:
- [PHP]マジックメソッドを使ったアクセサ(__get, __set)
- [PHP]FTPでアップロードやダウンロード等のファイル操作を行う
- [PHP]ユーザー定義関数の出力結果を任意の変数に格納する
- [PHP]Fatal Error発生時にログを作成する
- [PHP]PHP7.0での変更点とアップグレード時の対応
- [PHP]よくあるエラーメッセージの原因と対処法 1
- [PHP]よくあるエラーメッセージの原因と対処法 2
- [PHP]PDOを使ったMySQLデータベースへの接続と基本操作