もうエラーでつまずかない!PHP言語でデバッグを行う方法【初心者向け】

プログラミング初心者向けにPHP言語でデバッグを行う方法について解説しています。初めてサーバーサイド言語を扱うとなかなかエラーの場所を探すことが難しいと感じることも多いでしょう。エラーでつまずかないためにもぜひ書き方を覚えておきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

PHPのデバッグを行う方法について解説しています。PHPを始めたばかりという人は、エラーでつまずきやすいので、ぜひ理解しておきましょう。

そもそもPHPが何か分からない場合は、先にPHPとはの記事をご覧ください。

 

なお本記事は、TechAcademyのPHPオンライン講座の内容をもとにしています。

 

PHPプログラムのデバッグとは?

デバッグとは、作成したPHPプログラムのエラーを訂正したり、プログラムが想定通りに動くかどうかのチェックなどをすることです。プログラムの構文に間違いがあればエラーが表示されますが、それもデバッグの一種です。

カッコを閉じ忘れた、などは構文エラー(シンタックスエラー)となり、プログラムの動作が停止します。

 

大石ゆかり

田島メンター!デバッグとは何でしょうか?

田島悠介

ソースコードにエラーが無いか、ちゃんと動くかどうか確かめることなんだ。

大石ゆかり

なるほど。でも、構文エラーだと、ちゃんとエラーを表示してくれますよね?さっき、中カッコ{}を書き忘れてたのでシンタックスエラーが出てました。

田島悠介

その通り。ただ、それ以外の場合、実際に値を入れて動作させてみないとわからないよね。では、デバッグに便利な関数を見てみよう!

 

PHPのデバッグで覚えておきたい関数

PHP言語には、「var_dump」や「print_r」といったオブジェクトに入っている値、配列、変数を全て展開して表示する便利な関数があります。

多重構造になっている配列などで使用すると便利です。

<?php
  $a = [1,2,3];
  echo "<pre>";
  print_r($a);
  echo "</pre>";
  echo "<pre>";
  var_dump($a);
  echo "</pre>";
?>

「print_r」と「var_dump」の違いは、var_dumpのほうが若干詳細に表示される点です。

preタグで囲っているのは、表示を見やすくするためです。

プログラムの中にはオブジェクト指向になっていたり多層的な構造になっているケースがありますので、その場合は「debug_backtrace」を使用します。

<?php
  function a($a){
    $a = $a + 1;
    b($a);
  }
  function b($b){
    $b = $b + 1;
    c($b);
  }
  function c($c){
    echo $c;
    echo "<pre>";
    print_r(debug_backtrace());
    echo "</pre>";
  }
  a(1);
?>

関数a()を実行すると関数b()が実行され、最後に関数cが実行されて表示されます。

上記を実行すると、それぞれの関数についてトレースが表示されます。

[file] => C:\xampp2\htdocs\test\test.php
[line] => 5
[function] => b
[args] => Array

file・・・実行されたファイル
line・・・行番号
function・・・関数名
args・・・引数

関数やオブジェクトが外部ファイルになっていたり、それが多重構造的に使用されている場合などに重宝します。

 

大石ゆかり

print_rやvar_dumpは、変数や配列、オブジェクトの中身を展開してくれるんですねー。便利ですね。

田島悠介

そうそう。何が入っていたんだっけ?という時に便利だね。

大石ゆかり

debug_backtraceは、ちょっと難しいですねー。

田島悠介

ファイルを複数使っていたり、多重構造的になっている時に使うって覚えればいいかな。

 

[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中

PHPの実用的なデバッグ関数

PHPの組み込み関数を少し工夫して使用します。

function die_r($expression ,$return=false){
  print_r($expression,$return);
  exit;
}

使用するたびにプログラムが停止しますので、確認がしやすくなっています。

exitは、それ以降のプログラムの動作を停止します。print_rの第二引数をtrueにすると、表示されずに変数などに代入出来ます。

 

他に覚えておきたい関数として定数やインクルードされたファイルを表示する物があります。

get_included_files

include,requireされた全てのPHPファイル名を返します。

どういう順番でファイルが読み込まれていったのか、ライブラリ、外部ファイルなどがロードされているかといったことを確認できます。

get_defined_constants

定義されている全ての定数を取得できます。

 

PHPのデフォルト定数も含まれるので膨大な量になってしまいますが、PHP5からは、引数を与えると定数をカテゴリ分けしてくれるようになったので、見やすくなりました。

 

PHPのデバッグツール

IDE(統合開発環境)やフレームワークなどのツールには独自のデバッグ機構が備わっています。

 

PHPのIDE(統合開発環境)におけるデバッグ

IDEにXdebugのプラグインなどを導入すると、var_dumpの出力結果が見やすくなったり、ステップ実行などが可能になります。

  • eclipse + PDT
  • phpstorm
  • netbeans
  • Sublime Text(テキストエディタ)
  • Atom(テキストエディタ)

 

PHPのフレームワークにおけるデバッグ

フレームワーク各種には、独自のデバッグ関数が用意されています。

  • Laravel
  • CakePHP
  • Symfony
  • Codeigniter
  • Zend Framework

 

おわりに

PHPはサーバーサイド言語と呼ばれ、Webサイトの裏側の仕組みを作るためにあります。そのためエラーなども表には出ないので、つまずいたらデバッグしながら作業を進める必要があります。

ぜひデバッグの仕方を覚えておきましょう。

 

大石ゆかり

関数を組み立てて、デバッグ関数を作ったり、読み込んだファイル名を返したり、定義されている定数を表示してくれる関数があるんですねー。

田島悠介

今は、そういうのもあるって覚えておくだけでいいよ。

大石ゆかり

PHPの開発ツールやフレームワークにもデバッグが用意されているんですか?

田島悠介

ある時点からある時点までを実行できる、step実行のような機能もあったりするので、ある程度出来るようになったら使ってみるのもいいね。

 

また、PHPを勉強していて、

  • もっと効率的に勉強したい
  • 誰かに聞きながら学びたい
  • 自分でWebサービスを作りたい

と思ったことはないでしょうか。

 

そんな方のために、TechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

独学に限界を感じている場合はご検討ください。