Kintarou'sBlog

プログラミング学習中。学習内容のアウトプットや読書で学んだことなど随時投稿!

【PHP】例外処理

こんにちは😊Kintarouです。

現在エンジニア転職を目指してプログラミング学習中です👨‍🎓
夢はフリーランスエンジニアになって働く人にとって働く事が楽しくなるシステムを作ること!
と、愛する妻と海外移住すること🗽

プログラミングや読んでいる本のことなど、ブログに書いていきます!
twitter : https://twitter.com/ryosuke_angry


今回参考にさせて頂いたサイト様🙇‍♂️ dotinstall.com


例外処理を記述する

例外(ユーザーの想定していない動作)が発生した場合の記述方法です。
例外の発生しそうな箇所をtry{ ... } catchで囲み、例外の条件をthrow new Exceptionで返します。
例外が発生した場合の動作はcatch以降に記述します。

■User.php

<?php

class User
{
  private $name;

  #Userがnewされた際の引数$nameが13文字以上だった場合にExceptionクラスのインスタンスを生成する。
  public function __construct($name)
  {
    if (strlen($name) > 12) {
      throw new Exception("ユーザー名は12文字以内で登録して下さい");
    }

    $this->name = $name;
  }

  public function profile()
  {
    printf('%s' . PHP_EOL, $this->name);
  }
}

■main.php

<?php

spl_autoload_register(function ($class){
  require($class . '.php');
});

#Userクラスをnewする記述をtry{ ...} catchで囲む。
try {
  $users = [];
  $users[0] = new User('Mr.Kintaroooou');
  $users[1] = new User('Kinjirou');

  foreach($users as $user) {
    $user->profile();
  }
} catch (Exception $e) {
  echo $e->getMessage() . PHP_EOL;
}

#=>ユーザー名は12文字以内で登録して下さい

#$users[0]のインスタンス生成の際、引数が12より大きい字数の為、catch以降の処理がされている。
#ExceptionのインスタンスのgetMessageメソッドにより生成された時の引数(エラーメッセージ)が出力されている。

Exceptionが生成されて以降の処理($users[1]の生成以降)も処理は止まっている事に注意です。

以上、どなたかの参考になれば幸いです😊