• ベストアンサー

ココになんで「\」がつくのでしょうか?

はじめまして。PHP初心者です。 以下のプログラムで「\」が出てくる場所があるのですが 「\」はどういう場合につけるのでしょうか? 意味はあるのでしょうか? <?php $data = " <?php print \"Hello\"; ?> "; for($i = 0; $i < 3; $i ++){ $fp = fopen("$i.php", "w"); fwrite($fp, $data); fclose($fp); } for($i = 0; $i < 3; $i++){ echo "<a href=\"./$i.php\">$i</a>\r"; } ?> ご回答よろしくお願いいたします。

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

  • ベストアンサー
  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.4

01: <?php 02: 03: $data = " 04: 05: <html> 06: <head> 07: <title>タイトル</title> 08: </head> 09: 10: <body> 11: 12: <?php 13: $arr = file(\"testfile/test.txt\"); 14: mt_srand((double)microtime()*1000000); 15: print $arr[mt_rand(0,count($arr)-1)]; 16: 17: ?> 18: 19: </body> 20: </html> 21: 22: "; 23: 24: for($i = 0; $i < 10; $i ++){ 25: $fp = fopen("$i.php", "w"); 26: fwrite($fp, $data); 27: fclose($fp); 28: } 29: 30: for($i = 0; $i < 10; $i++){ 31: echo "<a href=\"./$i.php\">$i</a>\r"; 32: } 33: ?> 34: 「<?php」 はphpスクリプトの開始タグ、「?>」 は終了タグですよね。それで、 phpスクリプト文の中に書いた <?php、?> はphpタグではなく、単なる文字列です。 あなたの質問文は、 01行目 <?php で、ここから phpスクリプト開始、 03行目 $data = " で、4行目から、 22行目 "; で、21行目までの文字列を 変数$dataに代入する。ということになります。 この場合、4~21行の文字列中の変数は展開されますから、15行目の $arr を \$arr とエスケープしないとエラーになります。 シングルクォートで括ると変数の展開はしませんから、3行目、22行目をシングルクォートにすればエスケープの必要はありません。

pikapikamomomo
質問者

お礼

ありがとうございます! 大変助かりました。 シングルクォートにすればエスケープする必要もないのですね。 ありがとうございました。

その他の回答 (3)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

文字列の先頭や最後を示すためのダブルクォーテーションではなく、 そこには「本当に、文字として」ダブルクォーテーションが来ますよ、という意味だと思います。

pikapikamomomo
質問者

お礼

ご回答ありがとうございます。 意味がよくわかりました。 意味が分かったのでプログラムをいじってみたのですが プログラムをいじったら上手くいきませんでした。 補足に書いてみたので良かったらなぜ反映されないのか 教えてください。

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

二重引用符で括った文字列の中で二重引用符を書く場合には \ でエスケープします。エスケープしないと、その二重引用符で文字列が終わったとみなされます。 http://www.php.net/manual/ja/language.types.string.php#language.types.string.syntax.double (バックスラッシュは日本の文字セットでは \ で表示されます)

pikapikamomomo
質問者

お礼

ご回答ありがとうございます。 「"」以外もエスケープシーケンスを使わないといけないものなのでしょうか? プログラムをいじってみたら、反映されないので困っています。

  • neko-ten
  • ベストアンサー率55% (1287/2335)
回答No.1

エスケープするときです。 今回の場合、変数の中にPHPのコードやHTML書いていますよね。 で、その変数の中身を指定するときに「"」でくくっているのはわかると思います。 しかし、中身自体にも「"」がありますから、そのまま記載してもエラーになります。文章中の「"」で区切りになってしまいますから。 それを防ぐために、「これは区切り文字じゃないんだよ」っていう意図で使います。 実際のエスケープはここまで単純ではないですが、今回の事例を簡単に書くとこうなります。

pikapikamomomo
質問者

お礼

わかりやすいご回答ありがとうございます。 だから「"」の前についているのですね。 それは、わかったのですが、試しに補足にあるようにプログラムをいじってみたら反映されませんでした。 真っ白いページになってしまいます。 それは、なぜなのでしょうか?

pikapikamomomo
質問者

補足

ご回答ありがとうございます。 色々プログラムをいじってみたら反映されなくなりました。 なぜ、これはページが真っ白になってしまうのでしょうか? <?php $data = " <html> <head> <title>タイトル</title> </head> <body> <?php $arr = file(\"testfile/test.txt\"); mt_srand((double)microtime()*1000000); print $arr[mt_rand(0,count($arr)-1)]; ?> </body> </html> "; for($i = 0; $i < 10; $i ++){ $fp = fopen("$i.php", "w"); fwrite($fp, $data); fclose($fp); } for($i = 0; $i < 10; $i++){ echo "<a href=\"./$i.php\">$i</a>\r"; } ?>

関連するQ&A

専門家に質問してみよう