- ベストアンサー
ココになんで「\」がつくのでしょうか?
はじめまして。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"; } ?> ご回答よろしくお願いいたします。
- みんなの回答 (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行目をシングルクォートにすればエスケープの必要はありません。
その他の回答 (3)
- asuncion
- ベストアンサー率33% (2127/6289)
文字列の先頭や最後を示すためのダブルクォーテーションではなく、 そこには「本当に、文字として」ダブルクォーテーションが来ますよ、という意味だと思います。
お礼
ご回答ありがとうございます。 意味がよくわかりました。 意味が分かったのでプログラムをいじってみたのですが プログラムをいじったら上手くいきませんでした。 補足に書いてみたので良かったらなぜ反映されないのか 教えてください。
- shimix
- ベストアンサー率54% (865/1590)
二重引用符で括った文字列の中で二重引用符を書く場合には \ でエスケープします。エスケープしないと、その二重引用符で文字列が終わったとみなされます。 http://www.php.net/manual/ja/language.types.string.php#language.types.string.syntax.double (バックスラッシュは日本の文字セットでは \ で表示されます)
お礼
ご回答ありがとうございます。 「"」以外もエスケープシーケンスを使わないといけないものなのでしょうか? プログラムをいじってみたら、反映されないので困っています。
- neko-ten
- ベストアンサー率55% (1287/2335)
エスケープするときです。 今回の場合、変数の中にPHPのコードやHTML書いていますよね。 で、その変数の中身を指定するときに「"」でくくっているのはわかると思います。 しかし、中身自体にも「"」がありますから、そのまま記載してもエラーになります。文章中の「"」で区切りになってしまいますから。 それを防ぐために、「これは区切り文字じゃないんだよ」っていう意図で使います。 実際のエスケープはここまで単純ではないですが、今回の事例を簡単に書くとこうなります。
お礼
わかりやすいご回答ありがとうございます。 だから「"」の前についているのですね。 それは、わかったのですが、試しに補足にあるようにプログラムをいじってみたら反映されませんでした。 真っ白いページになってしまいます。 それは、なぜなのでしょうか?
補足
ご回答ありがとうございます。 色々プログラムをいじってみたら反映されなくなりました。 なぜ、これはページが真っ白になってしまうのでしょうか? <?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"; } ?>
お礼
ありがとうございます! 大変助かりました。 シングルクォートにすればエスケープする必要もないのですね。 ありがとうございました。