Open Source Web Development Tutorials - Dev Shed
PHPのデバッグにX-debugを使おう
(2009/03/19公開)
X-debug拡張機能によるファイル呼び出しの管理
完全なPHPデバッグライブラリに絶対に必要となる最も基本的な機能の1つは、スクリプトやアプリケーションによって使用されたファイルを、「include」ディレクティブによってロードされたファイルも含めて、管理する機能です。
幸い、X-debug拡張機能では、この情報が「xdebug_call_file()」により、読み取りやすいフォーマットで提供されています。名前から想像できるように、この関数はPHPスクリプトのために呼び出されたファイルの名前を返します。
この関数の機能はごく簡単に把握できますが、動作を理解するにはきちんとした例をセットアップするのが最適です。この点を念頭に置いて、「xdebug_call_file()」関数をメソッドの1つに実装した単純なクラスを定義します。
このサンプルクラスを次に示します。
class User{
private $firstName;
private $lastName;
private $email;
public function __construct($firstName,$lastName,$email){
if(!$firstName){
throw new Exception('Invalid parameter First Name.');
}
if(!$lastName){
throw new Exception('Invalid parameter Last Name.');
}
if(!$email){
throw new Exception('Invalid parameter Email.');
}
$this->firstName=$firstName;
$this->lastName=$lastName;
$this->email=$email;
}
// get first name
public function getFirstName(){
return $this->firstName;
}
// get last name
public function getLastName(){
return $this->lastName;
}
// get email
public function getEmail(){
return $this->email;
}
// get file from which this method was called
public function getFile(){
return 'Called from file '.xdebug_call_file();
}
}
この「User」クラスの動作についての説明は省略します。ただし、「getFile()」メソッドの実装には注意を払ってください。このメソッドは、X-debug拡張機能の「xdebug_call_file()」関数を内部的に使い、現在のスクリプトによって呼び出されたファイルの名前をクライアントコードへ返します。
この動作を把握するのは難しくないと思いますが、疑問をなくすために次のコードサンプルを参照してください。ここでは、「xdebug_call_file()」関数によって生成された出力が示されます。
try{
$user=new User('John','Doe','john@domain.com');
echo $user->getFile();
/* displays the following
Called from file C:pathtofiledebug_call_file_example.php
*/
}
catch(Exception $e){
echo $e->getMessage();
exit();
}
このように、「xdebug_call_file()」関数は「getFile()」メソッドを呼び出したファイルの名前を返します。これによって、PHPスクリプトにより使用された各ファイルを非常に簡単に管理できます。ここでは、この関数がどのように動作するかを理解しやすくするため、可能な限り単純な例にしています。
「xdebug_call_file()」関数を使って、PHPスクリプトの実行時に呼びされた関数、メソッド、ステートメントを判定する方法についてはこれで理解できたと思います。しかし、X-debug拡張機能には「xdebug_call_line()」という別の関数もあり、命令が実行された行番号を判定するために使用できます。
次のセクションでは、この新しいデバッグ関数の使用法について解説します。
Copyright © 2008 Ziff Davis Enterprise, Inc.
Originally appearing in the U.S. Edition of Dev Shed. All Rights Reserved.








