シングルクォーテーションとダブルクォーテーションについて

PHPのシングルクォーテーションとダブルクォーテーションの違いについて、復習も兼ねて書いていきたいと思います。。

結論
・シグルクォーテーションでかこった場合は、 変数と特殊文字エスケープシーケンス(\tや\tなど)は文字列になる
・ダブルクォーテーションでかこった場合は、変数は変数と認識され、エスケープシーケンスは展開される(反映される)

今回はこの違いに大分悩まされました。
しかし優しい先輩方などのおかげで無事解決!
勉強になりました。



さてその悩んだところですが、
1行掲示板を作るという処理の、ファイルに書き込む処理で、


//かきこみの
function write($comments) {
$number = count($comments) + 1;
$fp = fopen("bbs.txt",'a');
$comment = sprintf("%s\t%s\t%s\t%s\n",$number,$_POST['name'],$_POST['comment'],time());
fprintf($fp,'%s',$comment);
fclose($fp);
$comments[] = explode('\t',$comment);
return $comments;
}


こんな書き方をしたら$comments[1]や[2]を参照するときにエラーがでました。
なんだろうと思ったら、どうやら


$comments[] = explode('\t',$comment);


ここの部分でちゃんと「\t」(タブ)で区切られていないみたいでした。
「\t」が認識されていないのかな?と思った私は、


$comment = sprintf("%s\t%s\t%s\t%s\n",$number,$_POST['name'],$_POST['comment'],time());


↑の部分を、


$comment = sprintf('%s\t%s\t%s\t%s\n',$number,$_POST['name'],$_POST['comment'],time());


↑の様にシングルクォートでかこってみました。
しかしちゃんと区切られるようになりましたが、今度はファイルの中で「\n」(改行)が反映されなくなり、
読み込みのときの


$lines = file($filename);


この部分で、
$lines[0]に全部のデータが入ってしまうという事態になってしまいました。
調べてみると、それぞれのファイルの中身は、

*ダブルクォートの場合
1 aaaaaa bbbbbb 1215158278
2 cccccc dddddd 1215158322

*シングルクォートの場合
1\taaaaa\tbbbbb\t1215160968\n2\tccccc\tddddd\t1215160972\n

このように入っていました。
一見、シングルクォートの方は「\n」あるじゃんと思うのですが、これは文字列として表記されてしまっています。
なので、ファイルの中での改行区切りのfile関数だと全て1行だと思われてしまったみたです。
そしてダブルクォートの方ですが、改行もされているし、タブ文字もあるので、これはこれでOKでした。
しかし、


$comments[] = explode('\t',$comment);


こっちでシングルクォートでかこっていたのが問題でした。
これだと、「文字列としての\t」で区切るということになってしまいます。
なのでダブルクォートで囲われた元のデータは\tはタブとして扱われているので、認識されません。
というわけで結果、


//かきこみの
function write($comments) {
$number = count($comments) + 1;
$fp = fopen("bbs2.txt",'a');
$comment = sprintf("%s\t%s\t%s\t%s\n",$number,$_POST['name'],$_POST['comment'],time());
fprintf($fp,'%s',$comment);
fclose($fp);
$comments[] = explode("\t",$comment);
return $comments;
}


このようにどちらもダブルクォーテーションで囲む事により、シングルクォートとダブルクォートの問題は解決しました。
これからも忘れないようにしないと。。
しかし、


fprintf($fp,'%s',$comment);
これはシングルなのに、$commentの中身のタブ文字とかは普通に展開されているのが、軽く不思議だなぁと思ってみたり。。