元々は、小山さんがfacebookでお話をされていた内容がベースなのですが。
そちらのお話だと
「$data = preg_replace('~()~isD', $header_css . $css . $js . '$1', $data, 1);」といった感じの行を // でコメントアウトしたらsyntax errorになったお!!
的なお話でございました。
この辺をもっそ簡略的に、下記のコードで挙動を確認してみました。
まずは「普通に動く」コード。
<?php echo "?>\n";
で。コメントアウトすると…挙動がおかしい!!
<?php //echo "?>\n";
\n";
さて念の為。
<?php /*echo "?>\n";*/
…おや問題なく意図通りに動く。
理由は、以下の通り。
http://php.net/manual/ja/language.basic-syntax.comments.php
"一行"コメントは、改行または PHP コードのブロックの終わり のうちどちらか最初にくる方までです。 つまり、// ... ?> あるいは # ... ?> の後に続く HTML コードは 表示されるということです。
"一行"コメントは、改行または PHP コードのブロックの終わり のうちどちらか最初にくる方まで。
PHP コードのブロックの終わり…
PHP コードのブロックの終わり!!
「つまり、// ... ?> あるいは # ... ?> の後に続く HTML コードは 表示されるということです。」?
「つまり、// ... ?> あるいは # ... ?> の後に続く HTML コードは 表示されるということです。」…
「つまり、// ... ?> あるいは # ... ?> の後に続く HTML コードは 表示されるということです。」!!!
びっくりですねぇ驚きですねぇワンダーですねぇ。
…なんでこんな仕様にしたんだろう?
なかなか引っかかるケースもレアかとは思うのですが、引っかかるとかなり「頭が痛い」と思われるので、メモり。