2

私は次のステートメントを印刷しようとしています:

print false . "\n" . true . "\n";
echo false . (bool)false . "\n" . true . "\n";
print "0" . "\n" . true . "\n";

私が得ている結果はちょうど「1101」です。期待される結果は次のとおりです。

0
1
0
1
0
1

PHP 5.4.3 MSVC9 x64を使用しています。正しい方法で印刷する理由と方法を誰かに説明してもらえますか?

4

2 に答える 2

10

あなたの問題は+、PHP の文字列に対する演算子の誤解から来ています。文字列連結演算子は.、PHP が緩く型付けされているため、文字列を連結するか追加するかを認識しません。

私はあなたのためにそれを分解します:

print false + "\n" + true + "\n";
echo false+(bool)false + "\n" + true + "\n";
print "0" + "\n" + true + "\n";

echoまず、またはを選択することをお勧めしますprint。さて、以下:

print false + "\n" + true + "\n";

PHP 文字列が追加された場合 (接続されていない場合)は、 に評価され0ます。したがって、このステートメントは次のように評価されます。

print 0 + 0 + 1 + 0;

です1。他のものはそれに続きます。コードを機能させたい場合は、連結演算子 ( .) を使用する必要があります。.NET のやり方を書きたい、TrueまたはFalse好きな場合は、単純な関数を書くことができます。

function writeBool($var)
{
    echo ($var) ? "True" : "False";
}

PHP の緩やかな型付け (私に言わせればひどいことです) によると、 と評価されるtrueものはすべて"True" と記述されます。PHP での関数呼び出しはコストがかかるため、関数を使用してこれを行うことはお勧めしません。

于 2012-07-16T21:19:55.370 に答える
2

これでうまくいくはずです。配列を使用します。

$boolarray = Array(false => 'false', true => 'true');
echo $boolarray[false],"  ", $boolarray[true];

出力:false true

于 2012-07-16T21:33:50.083 に答える