ヒアドキュメント
function traditionalHereDoc()
{
// $ を使うとき \ でエスケープが必要
// でも PhpStorm の Language Injection で \$ はシンタックスエラー
html(<<< HTML
<div class="abc"></div>
<script>
\$(function() {
var \$var = \$('.abc');
\$var.text("123");
});
</script>
HTML
// 次のカンマを打つのに改行しないといけない
, false);
}
function html($html, $encode = true)
{
if ($encode) {
$html = htmlspecialchars($html);
}
echo $html . "\n";
}
Q. 不愉快ですなんとかなりませんか?
A. 文字列リテラル内で改行できますよ
function multilineStringLiteral()
{
// シングルクオート内でシングルクオートを使うときつらい
html(
'<div class="abc"></div>
<script>
$(function() {
var $var = $(\'.abc\');
$var.text("123");
});
</script>', false);
}
A. 俺の文字列の囲み記号は ob_start ?>
と <?php ob_get_clean
だぜ
function outputBufferingTrick()
{
// ハック臭がキモい。邪道
ob_start();
?><div class="abc"></div>
<script>
$(function() {
var $var = $('.abc');
$var.text("123");
});
</script><?php
html(ob_get_clean(), false);
}
最初にもどって、ヒアドキュメントを Newdoc <<< 'HTML'
にするのがいちばんマシな方法か...
でも結局シュッとインデント揃わないし、終端マーカーのあと改行しないといけないし、てかむしろ、本当に欲しいのは Ruby 2.3 の <<~
なんですよわかってくださいよ。
PHP 7.3 がわかってくれた!
function php73FlexibleNewDoc()
{
// $ を展開しないしインデントもできるし終端マーカーの後にコード書けるし最高
html(<<< 'HTML'
<div class="abc"></div>
<script>
$(function() {
var $var = $('.abc');
$var.text("123");
});
</script>
HTML, false);
}
結論 = さっさと PHP のバージョンを 7.3 にしましょう。
参考: フレキシブルなheredocがやってくる - Qiita
かぶってるけど大事なことなのでじゃんじゃん上げていきますよ