インスタンスの生成失敗を判定

インスタンス生成時に任意条件で生成失敗とさせたい場合、constructは戻り値を返せないのでreturn nullなどと記述してもインスタンスが返ってしまいます。

そこで以下の実装で判定できるようにしてみました。
失敗フラグをプロパティに追加する方法で対処。

class Hoge
{
  private static $instance;
  
  private function __construct()
  {
    if (失敗) {
      $this->fail = true;
   // return null; は不可。無視される
   // throw new Exception ("失敗") など場合によっては例外を発生させてもいいかも
    }
  }
  
  public static function getInstance()
  {
    if (!isset(self::$instance)) {
      self::$instance = new Hoge();
    }
    return !property_exists(self::$instance, 'fail') ? self::$instance : null;
  }
}

これで以下のような判定が可能になります

if (Hoge::getInstance()) {
  // 成功
} else {
  // 失敗
}