• ベストアンサー

PHPのTRUEとFALSEについて 値を返すというけれど、なぜ「1」かブランク(何もなし)なのでしょうか?

以下の文を実行すると、$abcには「3」があるので、TRUEになるはずなのですが、 エコーすると「1」と記載されます。 <?php $abc = "283743"; $abc = ereg("3",$abc); echo $abc; ?> 以下の文を実行するとエコーしても何も表示されません。 「0」は該当しないので、FALSEと表示されると思うのですが・・。 <?php $abc = "283743"; $abc = ereg("0",$abc); echo $abc; ?> ネットで調べると、それぞれTRUEとFALSEを返すと記載がありました。 それなのになぜ「0」と「何もなし」になるのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • kjirou
  • ベストアンサー率100% (1/1)
回答No.3

まず、eregの戻り値ですが ・マッチした場合は int型の1を返して ・マッチしない場合は bool型のfalseを返す ようですね(CentOS-CLI版PHP5.2.5で確認) ・・・マニュアルの該当部分を見ると 確かに int で返ると書いてありますが、どうもマニュアルと違うようです・・・。 で、それらが返るとしてechoで表示されない理由ですが int(1)の場合とfalseの場合で理由が異なります。 まず、falseですが echo false; とやると、falseがstring型へ自動型変換という手順を踏んでechoの対象になりますが PHPの場合は falseをstring型へ変換すると ""(空文字列)になります。 (別の言語では"false"という文字列に変換されるものが多いですね) よって、出力されません。 次に、int(1)が出力しない理由ですが > echo $abc; の部分を echo $abc . "\n"; として動作確認して貰っていいでしょうか? 多分それで"1"と表示されるようになるはずです。 なぜ、改行文字をつけないと出力されないのかは 理由がわかりません・・・。

その他の回答 (2)

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.2

http://php.benscom.com/manual/ja/function.ereg.php ここをよく読みましたか? return は int って書いてますよ。 $abc = "283743"; $abc = ereg("3",$abc); echo $abc; ↑これが 1 と表示するのは仕様上正確な返りです。 boolで返す関数もありますし、intで返す型も混在しています。関数ごとに返りの型は違いますので、確認しながら使ってください。 ereg()は、intで返す関数ですよ。 また、返り値を正確に目で見たいのであれば var_dump($abc); を使ってください。 $abc = "283743"; $abc = ereg("0",$abc); var_dump($abc); とやれば、表示としては bool(false) と表示されます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

別に、「true」とか「false」とかいう文字列を返すわけではなく 論理型のtrue値もしくはfalse値を返しており、echoで表示する際に、 可視化しているだけでしょう。 プログラム言語によってその辺の仕様はことなり、 「PHPではそういうもの」と考えるのが賢明でしょう。 この辺を参考に http://www.php.net/manual/ja/language.types.boolean.php キャストについては http://www.php.net/manual/ja/language.types.type-juggling.php#language.types.typecasting

関連するQ&A

専門家に質問してみよう