いままでは正常に実行された場合を見てきました。ですが、エラーが起きたらどうなるでしょうか。hello.phpの「print」命令を間違えて「ptint」などと書いてしまったとしましょう。これを実行すると以下のように表示されます。
まずここで確認してもらいたいのは、下記の部分です。
C:\xampp\htdocs\phplesson\chap01\hello.php:8
ここに、エラーが発生したファイルとその行数が書かれています。hello.phpファイルの上から8行目と分かります。まずはこの情報を手掛かりに、それより前のメッセージを読みつつ、エラーを取り除いていきます。
「Fatal error」は「PHPのコードを実行したときに発生した致命的なエラー」ということです。
次に、「Uncaught Error」は「エラー対応していない」という意味です。PHP 7以前では、致命的なエラーが発生した場合、対処方法はなく、できるだけ発生しないようにコーディングするしかありませんでした。ところが、PHP 7以降では、致命的なエラーが発生しても、それを検知して対処できる仕組みが組み込まれました。「Uncaught Error」は、その対処が施されていないという意味です。こちらは現段階では難しい内容ですので、「こんなのがあるんだ」と頭の隅に置いておいてもらうだけで問題ありません。
その次の「Call to undefined function ptint()」は、「ptint()」という「定義されていない関数を呼び出している」という意味です。「関数」は、この連載中に解説していきますが、現段階では「命令」と思っておいてください。このメッセージを読めば、「ptint()」が記述ミスであることが読み取れます。これを元に、ソースコードを修正して、バグを取り除いていきます。これを「デバッグ」と言います。
ここからは、具体的な文法の解説に入っていきます。今回は、ごくごく基本的な内容です。
文の区切りにはセミコロン「;」を使います。また、文の間の空行や空白文字は無視されます。例えば、次のようになります。
<?php print("line 1."); print("line 2."); print("line 3."); ?>
文の区切りには、必ずしも改行を使う必要はなく、次のようにしても文法上は問題ありません。
<?php print("line 1.");print("line 2."); print("line 3."); ?>
しかしコードが非常に見づらくなってバグの温床となるだけで、メリットが全くありませんので、こういう書き方はしてはいけません。
PHPタグ内の最後の文については、セミコロンを省略できます。chap01/hello.phpを見ると、1つの文ですが省略されていることが分かります。しかし、省略するのは、下記のように1行で書く場合に限定しておきましょう。
<?php … ?>
つまり、次のように書くのは文法上は正しくても、やってはいけない部類の書き方ということになります
<?php print("line 1."); print("line 2.") ?>
なぜかというと、上記の例の末尾にコードを追加する場合に、セミコロンを忘れてしまう可能性があるためです。わざわざ意図的に省略してもメリットはないので、常にセミコロンを入れるようにしましょう。
一般的にプログラミングでは、こういった「区切り文字」の入れ忘れは、文法エラーとなるだけではなく、エラーにはならず意図しない動きをすることもあります。そうなると、問題解決に手間取ることになります。常に入れておく癖を付けておけば、そういったことは防げます。
およそ、どのようなプログラミング言語でも、コードとして実行されない「コメント」を入れるための書き方があります。PHPの場合は3種類の方法があります。
<?php // 1. 1行コメント print("Hello World!"); // 行末に置くこともできます # 2. 1行コメント print("Hello World!"); # 行末に置くこともできます /* 3. 複数行コメント 複数行コメント */ ?>
1行コメントが2種類ありますが、1番目の方法を使うのが一般的です。本連載でも、この方法を主に使うことにします。
注意点として、3番目の複数行の方法は「ネスト(入れ子)」になってはいけません。コメントの中にコメントを入れてはいけない、ということです。例えば、以下のような記述です。
/* 3. 複数行コメント /* 入れ子のコメント */ 複数行コメント */
この例では、2行目のコメント終わりのマークでコメントが終わると解釈され、3行目がコメントになりません。
今回はPHPの基本的な書き方、およびエラーの読み方を扱いました。次回からは、変数や定数、基本的なリテラルの表記法など、さらに具体的なPHPの文法について解説していきます。
【2014/3/13】初版公開(山口晴広,株式会社イメージズ・アンド・ワーズ)。
【2017/4/10】PHP 7.1含め2017年の情報に合うように対応(齊藤新三/山田祥寛(監修),WINGSプロジェクト)。
Copyright © ITmedia, Inc. All Rights Reserved.