2012-03-10 7 views
5

PHPでプレイした後、trueが1として返され、falseがnullとして検出されました。trueまたはfalseを返す関数を使用するためのPHPのベストプラクティスは何ですか?

echo (5 == 5) // displays 1 
echo (5 == 4) // displays nothing 

trueまたはfalseを返す関数を記述するとき、それらを使用するためのベストプラクティスは何ですか?例えば、

function IsValidInput($input) { 
    if ($input...) { 
    return true; 
    } 
    else { 
    return false; 
    } 
} 

は、この機能を使用するための最良の方法

ありますか?

if (IsValidInput($input)) { 
    ... 
} 

どのように反対の機能を記述しますか?

IsBadInput($input) { 
    return ! IsValidInput($input); 
} 

===はいつ使用しますか?

+2

少なくとも4つの質問をしました。あなたの_real_質問は何ですか? – Madbreaks

+2

「PHP」と「ベストプラクティス」は、同じ文章でめったに聞かれない言葉です。 –

+1

@GeorgeCummins初心者にも当てはまります。どの言語にも同じです。 – Madbreaks

答えて

4

PHPでプレーした後、私は真が1とヌルとして偽として返されることを発見しました。

これは当てはまりません。PHPは他の多くの言語と同様に、「真実」と「偽」の値を持ち、TRUEまたはFALSEのように振る舞います。

PHPは弱い型指定を使用しています(対strong typing)。それは、それらを比較するときに異なるタイプの値を自動的に変換するので、最終的に同じタイプの2つの値を比較することができます。 echo TRUE;(PHP)の場合、echoは常に文字列を出力します。しかし、あなたはそれをブール値に渡しました。それはechoがその仕事をする前に文字列に変換されなければなりません。したがってTRUEは自動的に文字列"1"に変換され、FALSE""に変換されます。

===演算子はいつ使用しますか?

この弱い、または緩い、タイピングがPHPは、2つの等価演算子、=====を使用する理由です。比較している値が「等しい」(または同等のもの)ではなく、同じタイプであることを確認したい場合は、===を使用します。実際には:trueまたはfalseを返す関数を書くとき

echo 1 == TRUE; // echoes "1", because the number 1 is a truthy value 
echo 1 === TRUE; // echoes "", because 1 and TRUE are not the same type (integer and boolean) 

、それらを使用するためのベストプラクティスは何ですか?

実際のブール値TRUEまたはFALSEを返すことができます。典型的なケースは、という接頭辞を付けた関数です(isValidInputなど)。そのような関数は通常、TRUEまたはFALSEのいずれかを返すと予想しています。

一方、場合によっては関数が「偽」または「真実」の値を返すようにすると便利です。たとえば、strposとします。文字列が見つからない場合は、FALSE(bool)を返します。したがって:

$text = "The book is on the table"; 
echo (strpos($text, "The") == FALSE) ? "Not found" : "Found"; // echoes "Not found" 
echo (strpos($text, "The") === FALSE) ? "Not found" : "Found"; // echoes "Found" 
+0

この質問は良い答えに値すると思うので、私は完全に私の書き直しをしました。利用可能な以前のバージョン[ここ](http://stackoverflow.com/revisions/9643134/3)。 – bfavaretto

+0

追加情報:["公式"のstackoverflowの質問/ '=='対 '==='](http:// stackoverflow。com/questions/589549/php-vs-operator) – bfavaretto

1
  1. です。別の種類の構造(例: whileループ。

  2. あなたは決してありません。常に通常の関数を直接反転させます。

  3. あなたがそうでなければ罰金、

2
function isValidInput($input){ 
    return ($input ...); // if your test returns true/false, just return that result 
} 

あなたの最後の例は、引数が不足しているなど、0''からfalseを区別する必要がある場合:

function isBadInput($input){ 
    return !isValidInput($input); 
} 
+0

ありがとうございます。私はタイプミスを修正しました。はい、関数は良い例ではありませんでしたが、私はその例を明示的にしたいと思っていました。 –

+0

心配、歓声。 – Madbreaks

1

演奏した後、 PHPでは、trueが1として返され、falseがnullとして返されることがわかりました。

ありません。.. truefalseはブールtruefalseとして返されます。 出力をエコーするときは、表示する文字列にキャストする必要があります。per the manualとおり

ブールTRUE値は文字列"1"に変換されます。ブールFALSE""(空文字列)に変換されます。これにより、ブール値と文字列値の間の変換が可能になります。

その他は次のとおりです。正確な型の一致が必要な場合は、比較での型のジャグリングを避けるためです。 "1" == trueはtrueですが、"1" === trueはfalseです。

+0

OK、これは非常に役に立ちます。 –

0
function isValidInput($input) { 
    return ($input...); 
} 

if(isValidInput($input)) 
    ... 

if(!isValidInput($input)) // never rewrite inverse functions 
    ... 

if(isValidInput($input) === false) { 
    // Only run if the function returned a boolean value `false` 
    // Does the same thing as above, but with strict typing. 
} 
関連する問題