0

私のPHPコードのいくつかで、非常に奇妙で懸念すべき問題に遭遇しました。私が持っている変数は、明らかに false を返す必要がある場合に、IF ステートメントで true を返します。

$pr = $_SESSION['fin_print_printer']; //this should equal 0     
print $pr; //this returns 0, as it should
if($pr == "L"){
   print "local";
} else {
       print "serve";
} 
print $pr; //this returns 0 again, as it should

これにより、スクリプトに「ローカル」(2 つのゼロの間) が出力され、「サーブ」は出力されません。私のプロジェクトには 100,000 行を超えるコードがありますが、この問題はまだ経験しておらず、何が起こっているのかわかりません。

if($pr === "L") を実行すると、期待どおりに機能しますが、上記は機能しません。

4

3 に答える 3

1

PHP は 'L' を int に型キャストしようとしていますが、結果は 0 になります。

intval('L'); // 0

コードを次のように変更して、型が考慮されるようにします。

if($pr === "L")
{
    print "local";
} 
else 
{
    print "serve";
} 

または手動で文字列に型キャスト$prします。

// You can also to (string)$pr ("0" instead of 0)
if(strval($pr) == "L")
{
    print "local";
} 
else 
{
    print "serve";
} 
于 2013-08-31T01:16:50.963 に答える
0

あまり知られていないアプローチ: 次のようにキャストすることもできます

if ("L" == $pr) {

比較が緩いため、PHP は右の値を左の値の型にキャストstring(1)"L"します。int(0)int(0)string(1)"0"

于 2013-08-31T22:02:53.150 に答える
0

たぶん、型キャストを使用している場合(私はチェックしませんでした):

if ( (string)$pr == "L" ) {
   print "local";
} else {
       print "serve";
}
于 2013-08-31T01:05:23.633 に答える