トップページ > 2. マニュアル > 2.1. チュートリアル > チュートリアル(2) calc :簡単な計算機を作る/その3

チュートリアル(2) calc :簡単な計算機を作る/その3

タスクを実装する

 前回、プロシージャ設定ファイルタスク設定ファイルについて説明しました。今回はCharcoalPHPで最も重要な要素となる「タスク」について学びましょう。

タスクとは

タスクとは、イベントによって起動される一連の処理のことです。たとえば、ショッピングカートで商品を購入する際以下のような処理が必要になるでしょう。

  1. ユーザーが入力した商品購入に関するフォームの入力を検証する
    (例えばメールアドレス、郵便番号が正しいかなど)
  2. 商品の在庫を調べる
  3. 在庫が余っていれば、在庫を消費すると同時に商品購入履歴テーブルに履歴を追加する
  4. 決済を行う
  5. 商品が購入されたことをユーザーとショップオーナーに通知するため、メールを送信する
  6. 商品購入完了の画面を表示する

 実際にEコマースサイトを運営するには2、3のステップが必要になりますが、ここでは割愛します。

 上記のような処理のほとんどを担当するのがタスクになります。タスクではユーザーの入力処理、検索、更新などの処理(いわゆるビジネスロジック)のほか、ユーザーインタフェースに関わる処理を行うこともできます。

 通常は画面フロー制御とビジネスロジックは分けてタスクにします。その方が処理の責務の分担が分かりやすくなるからです。ただし、今回のサンプルではロジック部分と表示部分を1つのタスクで実装します。

タスクの処理をどこに書くか

 タスクはイベントによって起動します。タスクが起動されると、タスククラスに記述されたprocessEventメソッドが呼ばれます。ですのでプログラマーはこのメソッド内に目的の処理を書けばよいことになります。

 processEventメソッドがフレームワークから呼ばれた際、引数であるCharcoal_IEventContextオブジェクト(イベントコンテキストといいます)から以下のような情報を取得することができます。

 イベントコンテキストから取得できるこれらのオブジェクトを介して、プログラマーはリクエストの情報やセッション情報にアクセスすることができます。
 PHPの$_GETや$_POST、$_SESSION、$_FILES等のグローバル変数も使用できますが、CharcoalPHPではセキュリティその他の理由により推奨しません。これらのグローバル変数にはそれぞれラップされたクラスが用意されているので、それらのクラスを介して処理するようにしてください。

 以下が、計算タスククラスの処理です。

 順番に見ていきましょう。

 ここでは、イベントコンテキストから取得したリクエストオブジェクトから、パラメータaとbの内容を取得しています。たとえば

 という風にアクセスがあったとすると、リクエストオブジェクトにはパラメータaとbの両方の情報が自動的にセットされます。processEvent内でそれぞれを取得するために、ここではリクエストオブジェクトのgetIntegerメソッドを呼び出しています。

 getIntegerメソッドはリクエストオブジェクトの中に格納されている、整数型の値(オブジェクト)を取得するメソッドです。戻り値はオブジェクト(Charcoal_Integer)です。ただし、もしパラメータaに何もセットされていない、もしくは整数型と解釈できない値(例えば”aaa”など)がセットされている場合はNULLが返却されます。

 getIntegerメソッドの第二引数には、パラメータがセットされていなかった場合、もしくは整数型と解釈できない値がセットされていた場合の返却値を指定します。ここではa、bパラメータの規定値をどちらも0としていますので、パラメータaまたはbが空の場合は0が指定されたものとみなします。

 次に、パラメータaの値とパラメータbの値を足し算します。$aと$bには整数が入っていますから、足し算が行われます。この場合、$a=2、$b=3ですから2 + 3 = 5となり整数の5が$resultに代入されます。

 最後に、計算の結果($result)をechoステートメントで画面に表示して、processEventメソッドを終了しています。eol()関数はCharcoalPHPが定義する関数で、改行(ここではbrタグ)を出力します。

 このとき、processEventメソッドの戻り値をTRUEとしているのに注意してください。こうすることで、このタスクでイベントを処理したということをフレームワークに通知しています。通常、processEventメソッドの戻り値がTRUEだった場合、現在のイベントは消費されて他のタスクでは実行されません。もし戻り値をFALSEとした場合、フレームワークは現在のイベントを処理するために他のタスクを呼び出すかもしれません。

 以上で、計算タスクの実装は終了です。

次回は

 次回は、実際にブラウザから計算タスクの処理を確認してみます。

Pocket

Comments are closed.