PHP - BASIC - 1. Hello PHP! - 3. ステートメント

続いてステートメントについて学習していきましょう。ステートメントとはプログラムで記述された文のことです。次のプログラム( basic8.php )を見てみましょう。

<?php
echo "Hello PHP";
echo "Hello Python";
echo "Hello Java";

上記のPHPプログラムは3行のステートメントで構成されています。

echo "Hello PHP";
echo "Hello Python";
echo "Hello Java";

PHPのステートメントには一つルールがあります。それはステートメントの終端にセミコロン ; をつけるというルールです。それではルールに従わない場合はどうなるのでしょうか。試しにセミコロン ; を1つ省略してみましょう。さきほどのプログラム( basic8.php )を次のように修正します。

<?php
echo "Hello PHP";
echo "Hello Python"
echo "Hello Java";

ここでは echo "Hello Python" の後のセミコロン ; を削除してみました。作成したプログラムを実行してみましょう。

$ php basic8.php 
PHP Parse error:  syntax error, unexpected 'echo' (T_ECHO), expecting ',' or ';' in /Users/your_name/Desktop/code-php/basic8.php on line 4

上記のようにPHPのエラーメッセージが出力されます。エラーメッセージは初めて見ると難しく感じるかもしれませんが、これからPHPの学習を通じて少しずつ慣れていく必要があります。ここでは1行目の出力内容を分解して見ておきましょう。

まずエラーメッセージの冒頭の部分では、何が起きたのかが出力されています。

PHP Parse error:  

PHPのパース(解析)エラーと出力されています。これはPHPプログラムを正しく解析できなかったことを意味します。PHPに限らずプログラムには構文があり、その構文にそった形でプログラミングしていく必要があります。

さらに詳細なメッセージが続きます。

syntax error, unexpected 'echo' (T_ECHO), expecting ',' or ';'

syntax error は構文エラーという意味です。今回は意図的にセミコロン ; を外してみたので、正しいPHPの構文に従っていない、ということになります。上記のエラーメッセージでは echo 命令の後には ,; が続くはずだと説明しています。

echo 命令は echo "Hello", "World"; のようにカンマ区切りで複数のデータを出力できます。

エラーメッセージの残りの部分を見てみましょう。

in /Users/your_name/Desktop/code-php/basic8.php on line 4

これはPHPプログラムのどこでエラーがあったかを示しています。 /Users/your_name/Desktop/code-php/basic8.php ファイルの4行目にエラーがあることを示しています。

セミコロンの省略

ここまでに見てきたとおり、PHPプログラムのステートメントの終端にはセミコロン ; をつける必要があります。ただし例外的に、PHPプログラムの終了タグ ?> の直前のセミコロン ; については省略できます。終了タグ ?> にはセミコロン ; の役割が備わっていると考えれば良いでしょう。

具体的には次のようなケースです。さきほどのプログラム( basic8.php )を次のように修正します。

<?php
echo "Hello PHP";
echo "Hello Python";
echo "Hello Java"
?>

3行目のステートメント echo "Hello Java" にセミコロン ; が付与されていない点に注意してください。この場合、直後に終了タグ ?> が続くためにセミコロン ; の省略は許可されます。

それではプログラムを実行してみましょう。

$ php basic8.php
Hello PHPHello PythonHello Java

以前のように PHP Parse error は発生せずに、正しく出力されているのがわかります。

まとめ

  • ステートメントの終端には ; を付ける必要がある
  • ; が不足すると構文エラーである Parse error が発生する
  • 終了タグ ?> の直前の ; は省略できる