今日も適当ダイアリー

PHP や Javascript や Symfony、BEAR.Sunday などのWeb周りのことを中心に。それ以外のことも気まぐれに投稿します。

PHP を学び直す 第一回:ごくごく基本的な事

PHP の初級者、中級者向けに、PHP をきちんと学び直す、という事で、PHP 構文、文法などの基礎的な所をまとめていきたいと思います。

というのも、PHP を使っている身であっても、忘れてしまっていたり、知らなかったり、もしくは、マニュアルの意味がいまいち理解出来ないようなこともあると思います。
PHP マニュアルはとても良くできているので、ぜひ参照していただきたいのですが、それ以上に親切に実際に動かせるコードと共に、まとめて見たいと思います。

知らなくても使える情報もあると思いますが、より便利に、より深く理解出来るようになれると思いますし、人の PHP コードを読み解く際にあまり見慣れない表記方法を利用している場合もあるかと思いますので、少しでも、お役に立てれば幸いです。

なお、記事中の間違いや、不足している情報などがあることを気づいた方は、コメントにて連絡いただければ幸いです。

今回は、PHP の記述方法やコメントなどの、ごくごく基本的な事をおさらいしていきます。

ごくごく基本的な事

PHP の記述方法

PHP では、PHP の開始と終了をタグにより明示的に指定する必要があります。

また、PHP 開始タグ〜終了タグ内に書かれたコードのみが実行され、その外に書かれた文字列は、(それがコードとして問題がなかったとしても)無視され、そのまま出力されます。

test01-1.php

echo 'ここは PHP タグ内では無いため、無視され、そのまま出力されます';
<?php
    echo 'ここは、PHPとして認識され、文字列のみが表示されます。';
?>
ここは PHP として認識されません。

PHP コードのみを記述する場合、必ずファイルの先頭に PHP 開始タグを記述する必要があります。

test01-2.php

<?php
    // ここに PHP コードを記述します。
?>

最後まで PHP コードの場合は、PHP 終了タグを省略することが出来ます。

test01-3.php

<?php
    // ここに PHP コードを記述します。

PHP コードのみを記述する場合で、文字コードとして UTF-8 を利用する場合、一部のエディタでファイル先頭に BOM と呼ばれるバイナリが付加される場合があります。

その場合、先頭のバイナリ部分が PHP として解釈されず、そのまま出力されるため問題になる場合があります。

UTF-8 の BOM については、日本以外でほとんど知られていない事や、公的規格による裏付けも無いようです*1し、上記のような問題に遭遇する危険があるため、UTF-8 での保存時には、BOM 無し(一部のエディタでは UTF-8N という名称が使われている)で保存する事をお勧めします。

また、下記のように条件文の中などで、PHP から抜ける事も可能です。

下記の例では、わざわざ PHP から抜ける意味はほとんど無いですが、大量のテキストを出力する場合など、print や echo などを使うより、効率的です。

test01-4.php

<?php
    $a = 1;
    $b = 4;

    if ($a > $b) {
?>
<p><?php echo $a; ?><?php echo $b; ?>より大きいです</p>
<?php
    } else {
?>
<p><?php echo $a; ?><?php echo $b; ?>より大きくありません</p>
<?php
    }
?>
PHP 開始タグと終了タグ

PHP 開始タグと終了タグには 4 種類あります。
常に使用出来るのは次の 2 つです。

test02-1.php

<?php
    echo 'この記述が最も一般的で、好まれる方法です。' , "\n",
         'XML や XHTML を利用する場合は、規格に従うために',
         'この方法を使う必要があります。';
?>

test02-2.php

<script language="php">
    echo '常に使用できますが、あまり使われません。', "\n",
         'また、一部の HTML エディタでは、この記述を嫌うようです。';
</script>

下記の 2 つは、php.ini ファイルにより、有効/無効を切り替えられます。

test02-3.php

<?
    $str = 'テキスト';
    echo 'これは、短縮型のタグです。';
?><? echo $str; ?>」は、「<?= $str ?>」のように
省略して記述することが可能です。

test02-4.php

<%
    $str = 'テキスト';
    echo 'これは、ASP スタイルのタグです。';
%><% echo $str; %>」は、「<%= $str %>」のように
省略して記述することが可能です。

短縮型のタグ()が有効なのは、php.ini 設定ファイルのディレクティブ short_open_tag が 有効になっている場合か PHP が --enable-short-tags オプションつきで configure されている場合のみです。

ASP 型のタグ(<% 〜 %>)が有効なのは、 php.ini 設定ファイルのディレクティブ asp_tags が有効になっている場合のみです。

一般に公開する PHP を記述する場合や、再利用などが想定される場合などの、可搬性のあるコードを記述する場合には、動作しない可能性のある 短縮型や ASP 型のタグを使用しないようにするべきです。

命令の区切り

PHP では、C 言語などと同じく、改行はスペースやタブと同様に解釈されます。
1 つの命令が終了した際はセミコロン「;」を使用し、命令の終了を明示する必要があります。

test03-1.php

<?php
     echo 'あいうえお';

     // 1 行に複数の命令の記述も可能です
     echo 'かきくけこ'; echo 'さしすせそ';

     // また、1 つの命令を複数行に渡って記述することも可能です
     echo 
     'たちつてと'
     ;

なお、PHP 終了タグには自動的にセミコロンが含まれていると認識されるため、最終行(PHP 終了タグの前)は、セミコロンを記述してもしなくても問題ありません。

test03-2.php

<?php
    echo 'これは問題ありません';
?>
<?php
    echo 'これも問題ありません'
?>

ただし、セミコロンの付け忘れが起きる可能性があるため、PHP 終了コード前であっても、命令の終了時に、常にセミコロンを付けることを慣習とした方が良いと思います。

なお、PHP 終了タグの直後に改行がある場合、その改行も含めて終了コードと見なされます。

そのため、下記 2 例(test03-3.php と test03-4.php)の出力される内容はまったく同じになります。

test03-3.php

<?php
    echo 'あいうえお';
?>
かきくけこ

test03-4.php

<?php
    echo 'あいうえお';
?>かきくけこ
コメント

PHP は下記 3 つのコメントを利用できます。

  • // 以下(単一行コメント)
  • /* 〜(複数行コメント)〜 */
  • # 以下(単一行コメント)

test04-1.php

<?php
    echo 'あいうえお'; // ここから、この行はコメントと見なされます
    echo 'かきくけこ';

test04-2.php

<?php
    echo 'あいうえお'; /* ←ここから
    コメントと見なされます。
    ここまで→ */ echo 'かきくけこ';

test04-3.php

<?php
    echo 'あいうえお'; # ここから、この行はコメントと見なされます
    echo 'かきくけこ';

複数行コメント(/* 〜 */)は、コメントをネストする事が出来ず、最初に「*/」が現れた時点でコメントが終了するため、注意が必要です。

test04-4.php

<?php
// ※これは、構文エラーになります。
/* ←ここからコメントです。
    echo 'あいうえお'; /* 
    ここまで→ */ echo 'かきくけこ';
*/ // ←すでにコメントが終了しているため、
   //「*/」の所で PHP 構文エラーが発生します!

単一行コメント(// もしくは #)は、改行、または PHP 終了タグのいずれかにより終了します。

つまり下記のような場合、PHP 終了タグ「?>」にてコメントは終了するため、「かきくけこ」は出力されます。

test04-5.php

<?php //echo 'あいうえお'; ?>かきくけこ

また、単一行コメント後に PHP 終了タグがあると、それによりコメントが終了するため、それ以降の PHP ブロックには影響を及ぼしません。

つまり、下記の場合、「かきくけこさしすせそ」が出力されます。

test04-6.php

<?php //echo 'あいうえお'; ?>かきくけこ<?php echo 'さしすせそ'; ?>

ただし、script タグについては、単一行コメント中の PHP 終了タグ()は PHP モードが終了しないため、注意が必要です。

test04-7.php

※これは、構文エラーになります。
<script language="php"> echo 'あいうえお';
    // この終了タグはコメントとして扱われます→</script> 
かきくけこ
<script language="php">
// ↑PHP モードが終了していないのにも関わらず、
// PHP 開始コードが現れたため、PHP 構文エラーになります。
echo 'さしすせそ';  </script> 

参考:http://www.php.net/manual/ja/language.basic-syntax.php