2

データベースへの接続とさまざまな構成変数の設定に多くの作業を行う、かなり一般的なコードを実行する関数があります。私が実行したこの最上位関数コードの if ステートメントは、実際には関数ごとに異なります。

これが今の様子です。

function get_users(){
  // config
  // set application keys
  // connect to database
  // retrieve user data
  // authentication to foreign api
  if(something){
    // some more red-tape
    if(something){
      //more more
      if(something){
        /* finally the good stuff */

        // the code here varies from function to function
        // eg. get users
        // probably will run: inner_get_users();

      }
    }
  }
}

function get_data(){
  // config
  // set application keys
  // connect to database
  // retrieve user data
  // authentication to foreign api
  if(something){
    // some more red-tape
    if(something){
      //more more
      if(something){
        /* finally the good stuff */

        // the code here varies from function to function
        // eg. get data
        // probably will run: inner_get_data();

      }
    }
  }
}

おそらく匿名関数を使用して、どのように機能させたいか:

function instance($inner){
  // config
  // set application keys
  // connect to database
  // retrieve user data
  // authentication to foreign api
  if(something){
    // some more red-tape
    if(something){
      //more more
      if(something){
        /* finally the good stuff */

        Call inner

      }
    }
  }
}

function get_data(){

  instance(function(
    // get the data
  ));

}

または多分

function get_users(){

  $var = function(
    // get the users
  );

  instance($var);

}

私は、より優れた、より乾燥した、より保守しやすいコードを探しています。

4

1 に答える 1

1

これは、PHP が変数関数を呼び出すものです。これ$innerは、 が関数の文字列名である場合と無名関数である場合の両方で機能します(ただし、変数関数のマニュアル ページでは説明されていません)。

function instance($inner){
  // config
  // set application keys
  // connect to database
  // retrieve user data
  // authentication to foreign api
  if(something){
    // some more red-tape
    if(something){
      //more more
      if(something){
        /* finally the good stuff */

        return $inner();

      }
    }
  }
}
于 2012-05-21T13:49:03.173 に答える