LoginSignup
13
14

More than 5 years have passed since last update.

PHPのクロージャの数少ない使いどころ

Last updated at Posted at 2014-07-29

①Factoryパターンの代替

呼び出し側

$type = "rakuten"; 
// 他には Yahoo, Amazonなど

// 在庫数を取得する
$arDef = ExampleStockFactory:factory($type);

// 配列内のクロージャは直接呼べないので、1度代入する
$fn = $arDef["fn"];

// 在庫数の取得
$stockNum = $fn();
ExampleStockFactory
class ExampleStockFactory {

  public static function factory($type){

    switch( true ){
        case preg_match( "/[正規表現など]/", $type );
        case $type == "rakuten" : // 楽天APIを叩く
          // APIキー
          $apiKey = "secrete api key";

          // クロージャを定義
          $fn = function() use ($apiKey){
            return RakutenApi::getStock($apiKey);
          };
          break;
        case "...." : //others
        default : // 該当なしの場合は、NullObjectで返す
          $fn = function(){ return -1 };
    }

    // 配列形式で付随情報と共に返す
    return array(
      "type" => $type,
      "fn" => $fn
    );
  }
}

なぜクロージャなのか

デザインパターンをご存知の方は、この記述がFactoryパターンとNullObjectパターンの代替である事は、お分かりになると思います。
しかし、

PHPでわざわざクラス定義ファイルを書くのは面倒

という時に、この書き方をしてみるといいかもしれません。

PHPにクロージャって必要??

色々と使ってみたところ、リソース節約したい時に結構使えます。

13
14
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14