2017-07-26 9 views
0

データベースからテーブルをダンプするために複数のスクリプトでグローバルに使用される関数に複数のパラメータを渡すための実用的なアプローチが必要です。PHPマルチパラメータ関数

複数のパラメータ(それぞれデフォルト値)を受け入れ、スクリプト内で特定のオプションを有効にする必要があるかどうかによって異なります。例えば

dump_table(false,false,false,false...., true) 

Soが:

function dump_table($sumtotal=false, $countrows=false, $yadalada=false... etc){ 

質問は、私が10個の異なるパラメータを持って、スクリプトが真であることが唯一のパラメータ10を必要とする場合、私はこのような何かを呼び出す必要があり、あります..関数呼び出しのオーバーヘッドなしで簡単にスケーラブルにする別の方法はありますか?

私はオブジェクトを使用しますが、afaikはすべての呼び出しでクラスとインスタンスの作成を行います。

PHPでこのような何か(ジャバスクリプトのようなスタイル)を作るための方法があります:

dump_table({opt1: true, opt10: true, opt99: true}) 

それとも私がproperty_existsようなものを使用する関数の中でも

$options = { count: true, sumtotals: true }; 
dump_table($options); 
  • 設定するものを確認してください。

thx

+0

_if場合、これは間違ったアプローチになるあなたの構築することができます。あなたのコードデザインは面倒です。単一の責任について考える... –

+3

単純な連​​想配列...? – CBroe

+1

私はおそらく関数の代わりにそれを処理するクラスを作成します。次に、パラメータとしてデフォルト値とセッタとゲッタを持つプロパティとして設定を行うことができます。 –

答えて

0

function yourFunction(array $parameters = array()) { 
    //here you should define all possible parameters with their defaults 
    $param_1 = true; 
    $param_2 = false; 
    ... 
    $param_10 = true; 
    ... 
    $param_N = 'whatever'; 

    //and now simply extract passed parameters 
    extract($parameters, EXTR_OVERWRITE | EXTR_IF_EXISTS); 
} 

使用法:

あなたは、このようなアプローチを使用することができます

extract($parameters, EXTR_OVERWRITE | EXTR_IF_EXISTS)は、既定の定義済み変数を$parameters配列に渡すもので上書きします。

+0

omgそれは純粋な魔法です!魅力のように動作します。ありがとうございました。 –

0

@CBroeは、連想配列は、あなたが探している解決策になる可能性があり、示唆したように:私はオーバーライドするための入力として、いくつかのデフォルトオプションの配列と1つのアレイを取るだろう

$options = array(
    'count' => true, 
    'sumtotals' => true, 
    'option3' => false, 
    ... 
    'option9' => false 
    ); 
dump_table($options); 
0

<?php 

function foo($optionsgiven = array()) 
{ 
    $defaultoptions = ['width' => 10, 'height' => 20, 'weight' => 30]; 

    foreach($defaultoption as $key => $value) { 
    if(isset($optionsgiven[$key])) { 
     $options[$key] = $optionsgiven[$key]; 
    } 
    else { 
     $options[$key] = $value; 
    } 

    } 
} 

// main script 
$x = foo(['width' => 100]); 
?> 
0

これは間違った方法です。 json_encode()とjson_decode()を使用して配列をエンコードしてデコードすることをお勧めします。 すべてのプロパティを配列に設定できます。

$array = array(
    "sumtotal" = false, 
    "countrows" =false, 
    "yadalada" = false 
); 
dump_table(json_encode($array)); 
あなたはその配列 json_decode($array, true);をデコードする必要がある関数の内部

、あなたは、私は10の異なるparameters_を持っている他たstatments