PHP では文字列の変数を設定する場合に、一重引用符(シングルクォーテーション)と二重引用符(ダブルクォーテーション)を使用することができますが、ついつい間違えてしまう記述例を列挙します。
スポンサーリンク
一重引用符の場合はほとんど何も行うことなく囲まれた範囲をそのまま文字列として扱いますが、二重引用符の場合は多くの解釈を行います。イメージだとそういう感じです。
変数の扱いの違い
$var = "HELLO"; // 間違い(引用符の場合) // 変数の中身は展開してくれない var_dump('$var WORLD'); // 出力 // ------------------------------------------------------- // string '$var WORLD' (length=10) // 引用符の場合は、文字列を結合させる必要がある var_dump($var . ' WORLD'); // 出力 // ------------------------------------------------------- // string 'HELLO WORLD' (length=11) // 正しい(二重引用符の場合) var_dump("$var WORLD"); // 出力 // ------------------------------------------------------- // string 'HELLO WORLD' (length=11)
改行の扱い(特殊文字のエスケープシーケンス)の違い
// '\n' をそのまま文字として扱う(引用符の場合) var_dump('aaa\nbbb\n'); // 出力 // ------------------------------------------------------- // string 'aaa\nbbb\n' (length=10) // '\n' を ラインフィード として扱う(二重引用符の場合) var_dump("aaa\nbbb\n"); // 出力 // ------------------------------------------------------- // string 'aaa // bbb // ' (length=8)
Windows でパスを扱う場合の違い
// 正しい(引用符の場合) var_dump('D:\dir\subDir\text.txt'); // 出力 // ------------------------------------------------------- // string 'D:\dir\subDir\text.txt' (length=22) // 間違い(二重引用符の場合) var_dump("D:\dir\subDir\text.txt"); // 出力 // ------------------------------------------------------- // string 'D:\dir\subDir ext.txt' (length=21) // 正しい(二重引用符の場合) // バックスラッシュでエスケープさせる必要がある var_dump("D:\\dir\\subDir\\text.txt"); // 出力 // ------------------------------------------------------- // string 'D:\dir\subDir\text.txt' (length=22)
Pingback: [ PHP ] ヒアドキュメントと newdoc の違いと Parse error が発生する原因 – 勉強ダイエット