5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

コメントのようでコメントでない

Posted at

PHPには、いくつかコメントアウトの方法があります。ただし、うっかりしているとハマることもあります。

3通りのコメントアウト

PHPには、なぜか2つの行コメントと1つのブロックコメントという、3通りのコメントアウトの方法があります。

PHP言語内でのコメントアウト
<?php

// C++スタイルの1行コメント
# シェルスクリプト系の1行コメント
/*
  C言語スタイルのブロックコメント
*/

そして、コメントの中でPHPを閉じるなんて離れ業もできてしまいます。しかも、コメント形式によって挙動が違います。

PHPの閉じ開きが入る場合
<?php

// コメント ?>
ここはそのまま出力
<?php
/*
?>
ここはコメントアウトされて出力されない
<?php
*/
php_code();

このようなことが起きるので、(XML宣言や正規表現などで)文字列中に?>が入ったものをコメントアウトすると、**そこでPHPから抜けてしまいます。**注意が必要です。

思わぬ切り替わり
<?php
//echo '<?xml version="1.0" encoding="UTF-8" ?>'
ここはPHPの外

コメントに見えるけど

PHPでHTMLを出力する場合、HTMLとしてコメントを入れることももちろん可能です。ただし、HTMLのコメントはPHPにとっては処理すべき文字列の一部でしかありません。以前ウンコード・マニアに投げたネタですが、

unkode.php
<!-- 未定義なのでコメントアウト
<?php undefined_function(); ?>
-->

のように、PHPレベルで動かないコードをHTMLでコメントアウトすると、このコメントの中でPHPのエラーが発生してしまいます。環境によっては全体がコメントであるかのようにシンタックスハイライトがかかるので、特に注意が必要です(ここでは、わざとHTMLだけの指定にして全体がコメントアウトのように見えるよう工夫しています)。

なお、逆にPHPコードでHTMLコメントを生成することも、必要とあれば可能です。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?