2016-07-28 5 views
0

関数内で計算を完了するために変数セットが必要な場合、変数が空であれば 'exit'を条件とし、以下のような変数を定義するのが最善でしょうか?または、より良い選択肢ですか?必要な変数、空の場合は終了するのに最適な方法は?

$type = $row['item_options']['purchased_type']; 
if (!$type) { exit; } 

$bf_required = 0; 

$balance = 0; 

$tour_id = $row['entry_id']; 
if (!$tour_id) { exit; } 

$places = $row['quantity']; 
if (!$places) { exit; } 
+2

スクリプトを終了することはあなたのビジネスニーズを満たしていますか? –

+0

@JohnCondeこんにちはJohn。理想的ではありません。すべてを正しく実行するためには計算を完了する必要がありますが、すべての変数が必要な場合にこれを行うにはどうすればよいかわかりません。 – ccdavies

+3

これはオープンエンドの質問のようなものなので、私はそれを閉じるようにマークします。しかし、私はまずあなたの早急なアドバイスをしておきます。これは、私の意見では、[例外](http://php.net/manual/en/language.exceptions.php)を使う良い例です。変数が定義されていない場合は、例外をスローします。次に、ロジックの上位が上がると、これらの例外を検索(およびキャッチ)し、「XYZは必須フィールドです」などのエラーをユーザーに表示できます。 – Sam

答えて

1

アプリケーションがゆがんで何かを示すために(それは、彼らがためにそこにあるものです)その後、最善のアプローチは、例外に依存することです、設定する値を必要とする場合。例えば

$type = $row['item_options']['purchased_type']; 
if (empty($type)) { 
    throw new Exception('Invalid type.'); 
} 

あなたも、それらをキャッチして、あなたがそれらを適切に処理できるように、基本Exceptionクラスを拡張し、独自のカスタム例外を作成することができます。特異的に/キャッチを

class InvalidInputException extends Exception {} 

そして、あなたは投げることができます。この場合は、次のような例外を作成することがあります。

+1

'独自のカスタム例外を作成することさえできます - それは間違った考えです。ほとんどのケースを簡単にカバーする組み込み型がすでにいくつかあります。 'RuntimeException'を実行することができたとき)は、適切な' catch 'を構築できないので、 'Exception'を投げることは悪いです。 –

+0

@MarcinOrlowski私はそれが間違った考えだとは思わないでしょう。しかし、おそらく、 "あなたは' Exception'クラスのベースを使うべきではありません。*あなたがそれらを適切に 'キャッチする 'ことができます。例外が組み込まれていますが、具体的なものではありません。おそらく、この例は 'class InvalidUserInput extends InvalidArgumentException {}'のようなものでなければなりません。 – Sam

+0

@ Samおそらく、それは基本的に文言です。私が意味していたのは、彼の「デフォルト」のアプローチは、ベース「例外」のインスタンスを投げることです(私は「あなたも...できます」の存在によって判断します)。 –

0

計算を完了するために変数のセットが必要な場合は、変数が空の場合は「終了」という条件付きで、以下のような変数を定義するのが最善でしょうか?または、より良い選択肢ですか?

まず、コードには何も表示されません。すべての引数が存在していても、関数自体は全く問題ではないので、関数自体は気にする必要はありません。実際にPHPを使用すると、必須の引数を省略した場合、あなたを平手打ちします:

function doTheCalculations($arg1, $arg2) { 
... 
} 

すなわち

$x = doTheCalculations(); 

それはそれは必要なすべてのデータを持っていない場合は、自分自身を訴える確保するために、このメソッドを呼び出すコード次第です。だからあなたはこの部分を間違ってしまった。 $row['item_options']['purchased_type']booleanでない限り

また、このコードは、あまりにも間違っている:

$type = $row['item_options']['purchased_type']; 
if (!$type) { exit; } 

ヒント:明確な小切手を作る - あなたが値を確認したい - >の値を確認してください。あなたはタイプをチェックしたいですか?タイプを正しく確認してください。あなたはそれが存在することをチェックしたいですか?何かが許容範囲か、無効なタイプのうち、すなわちであるため、あなたはそれが数学を行うことができないあなたに伝えるために、あなたのdoTheCalculations()方法をしたい場合は最後に、私はExceptionを投げるだろうisset()defined()など

を使用します。

if (!is_int($arg1)) { 
    throw new \RuntimeException("....."); 
} 

代わりに、メソッドをstatusboolean)とresultstatustrueの場合)と返すようにすることもできます。必要に応じてフィールドを追加できます。または、これはさらに厄介であり、単純にクリーンではない(多くのPHP組み込み関数でもこれを行う)ことをお勧めしません。doTheCalculations()が返され、intが返されると仮定すると、計算できない場合はfalseを返すことができますしかし、このアプローチでは、なぜあなたが理由を返すまでこれが起こったのか分かりません。

関連する問題