2011-12-22 15 views
6

私はPHPで「0」を別の方法で扱っている問題を抱えています。PHPは "0"を空として扱いますか?

私は2台の異なるマシン上で次のスクリプトを実行します。

$a = "0"; 
if ($a) { 
    echo("helo"); 
} 

1)ローカルマシン - それは有効なものとして "0" を扱うと 'HELO' を印刷し

を> - > PHP 5.2.17 を2)サーバ - > PHP 5.3.6 - 空であるとみなして "0"を返し、 "helo"を表示しない

これはphpの設定バージョン?

+4

PHP 5.2.17(Win32)では、 '$ a =" 0 ";'(CLIとApacheを使って確認したところで)テストしても "helo"は表示されません。あなたは文字列中に別の文字を持っているにちがいないでしょう。おそらく '\ r'のように印字されても見えない空白文字でしょうか? – DaveRandom

答えて

5

これは、それが想定されている方法です。 PHPはbooleanコンテキストで文字列を解釈します。 "0"は実際の0に相当します。あなたがテストするために何を意味するのか

はおそらくある(またhttp://www.php.net/manual/en/types.comparisons.php参照):

if (strlen($a)) { 
+0

しかし、PHP 5.2.17ではそれをしていませんでしたか? – Jaanus

2

if($a)documentationあたりとして、FALSEでなければなりません。それはあなたの地元のマシンでもそうでなければなりません。あなたは、ローカルマシン上で、0か何かの後ろに空白がないのは確かですか? ( "0<space>" TRUEだろう。)

0

サウンド私に奇妙な、私は思った "0" はあなたが確認することができ、偽だったhere

0
それがnullにequivilentされるようにPHPがfalseとして "0" をinterporateこと

/false/0。

ただし、「0」の文字列として組み込むこともできます。したがって、if文はtrueを返しますが、それを(string)にキャストしない限り、バグになると思います。

Marioが言ったように、strlen($ a)をチェックするか、(!empty($ a))をチェックして確定的な答えを得ます。

こちらがお役に立てば幸いです。

関連する問題