2011-12-26 3 views
1

安全なパラメータを関数に渡すか、関数がそれを確認するか?

<?php 
$a = ''; 

echo empty($a) ? '' : substr($a, 0, 1); // Prints: '' 
echo substr($a, 0, 1); // Prints: '' 

"エコー" は良いですか?以下のコードを考えてみてください。最初は常に$ aがチェックされ、substrは正常に実行され、2番目にsubstrは$ aを内部的にチェックし、いくつかの通知エラーを引き起こす可能性があります。

答えて

0

最初の方が良いです。

エラー/警告/通知を常に防止する必要があります。

私は読みやすさのために単一行を使用していませんが。

0

最も重要な部分は、あなたが入力と出力の変数の間で異なることがある:あなたが検証を書く方法

$input['a'] = ''; 

$output['a'] = empty($input['a']) ? '' : substr($input['a'], 0, 1); 

echo $output['a']; 

はあなたのビジネスである、それはすべてのエッジケースに対処し、トリガすべきでありません任意のエラー/警告。

編集:あなたは、関数呼び出しの回数を減らすことが気になる場合には、次のスニペットは、いずれかの機能を使用しませんが、一つだけ言語が構築:

$a = empty($a[0])?'':$a[0]; 
echo $a; 
+0

私の焦点は、パフォーマンスについてです。 Substrは単なる例です... – AHHP

+1

まず、エラーや次回のパフォーマンスを防ぐために焦点を移すことを検討してください。 – PeeHaa

+0

+1はPeeHaaのコメント、パフォーマンスは相対的ですが、セキュリティはそうではありません。セキュリティには、コードが安全に実行されることが含まれます(渡された入力値に関係なくスクリプトが実行するセキュリティ)。そうでなければ、パフォーマンスは役に立たない。なぜなら、それはまったく実行しないからだ。 – hakre

関連する問題