• ベストアンサー

ダブルクォーテーションで囲まないと表示できない変数

ネットから拾ってきたサンプルソースをphp5.2.3を使って試行錯誤中です。 今回、メール受信のソースを試しており、 exitに変数を添えて変数の確認をしていたところ、 8行目は変数が表示できず、 9行目のようにダブルクォーテーションで囲むと表示できる といった変数がいくつかあることに気付きました。 10行目などの変数は、ダブルクォーテーションなしでも表示できますし、 print関数だと、ダブルクォーテーションのあるなしにかかわらず表示できています。 どのような変数でおこる現象なのか、知りたいと興味がわきました。 ご存知の方がいらっしゃいましたら、ご回答よろしくお願い致します。 ソース概略 (文頭の数字は行数,$host/$user/$passは事前に代入済) 01 $sock = fsockopen($host, 110, $err, $errno, 10) or die("サーバーに接続できません"); 02 $buf = fgets($sock, 512); 03 if(substr($buf, 0, 3) != '+OK') die($buf); 04 $buf = _sendcmd("USER $user"); 05 $buf = _sendcmd("PASS $pswd"); 06 $data = _sendcmd("STAT"); 07 sscanf($data, '+OK %d %d', $num, $size);   // 以下、必要なもの以外はコメントアウトして確認 08 exit($num);  //表示できない 09 exit("$num"); //表示できる 10 exit($host);  //表示できる 11 print($num);  //表示できる 12 print("$num"); //表示できる

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

単に「exit」に仕様では?exit("1")はstringですが、exit(1)ならintegerですから。  http://www.php.net/manual/ja/function.exit.php   iPHP >= 4.2.0 ではstatus が integer の場合それを表示しません。

mimoty
質問者

お礼

お恥ずかしいことに、「仕様」ということに目が向きませんでした。 そうですよね、printでは表示される時点で、気付くべきでした。 納得です。どうもありがとうございました。

その他の回答 (1)

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

http://www.php.net/manual/ja/function.exit.php 引数がintの場合は、エラーコードを返すとあります。 exit("$num"); というのは$numをパースして、文字列として判定されています

mimoty
質問者

お礼

先の方の回答で十分理解できましたが、 yambejpさんの解説で、さらに理解を深めることができました。 どうもありがとうございました。

関連するQ&A

専門家に質問してみよう