Windows8にNetBeansでPHPの開発環境を作成する

NetBeansでPHPの開発環境を作成する手順をまとめた。

XAMPP for Windowsのインストール。

NetBeansにはPHPやApacheが含まれていないため、あらかじめ用意する必要がある。
XAMPP for Windowsで、PHP・Apache・MySQLをまとめてインストールする。

XAMPP for WindowsからXAMPP Windows版をダウンロードする。

XAMPP for Windows

ダウンロードしたら、プログラムを実行してインストールする。
インストールの設定は初期値のままで問題ない。

Xdebugの設定

初期設定ではXdebugは無効になっていて、NetBeansのデバッグ機能が使えない。

PHPの設定を変更し、Xdebugを有効にする。

PHPの設定ファイル(C:\xampp\php\php.ini)を開き、ファイルの終わりの部分にある[XDebug]のセクションを編集する。

[XDebug]
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
xdebug.remote_enable = on
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
xdebug.trace_output_dir = "C:\xampp\tmp"

XAMPP Control PanelからApacheを実行し、エラーがないことを確認する。

XAMPP Control Panel

http://localhost/にアクセスし、XAMPP for Windowsの画面が表示されればOK。

http://localhost/

Javaのインストール

NetBeansを実行するにはJavaが必要になる。
あからじめJavaをインストールしておく。

java.comからJavaをダウンロードしてインストールする。

##NetBeansのインストール

NetBeansのサイトからPHP用のNetBeansをダウンロードします。

NetBeans

ダウンロードが完了したら、インストーラを実行してインストールする。

NetBeansの設定

NetBeansを起動して、メニューの「ツール」→「オプション」を選択する。

PHPを選択する。

一般タブの「PHP 5インタプリタ」の欄に「C:\xampp\php\php.exe」と入力する。

PHP 5インタプリタの設定

「OK」ボタンを押して設定を登録する。

以上で、NetBeansでPHPアプリケーションを開発する準備ができました。

PHP開発にWebMatrix2をためしてみた簡単な感想

PHP開発にWebMatrix2をためしてみた簡単な感想

優れていると感じたところ

  • インストールが簡単。導入で困ることがない。
    PHPやMySQLなど必要なプログラムは、自動的にダウンロードしてインストールしてくれる。

  • プロジェクトごとにPHP5.3とPHP5.4のどちらのバージョンを使用するか選択できる。

  • ExtensionsでGit・ZenCoding・TypeScriptが使える。

  • エディタの入力補完は軽快で使いやすい。

物足りないと感じたところ

  • ブレークポイントを設定することができない。

  • YAMLファイルのハイライトが未対応だった。
    最近は設定ファイルにYAMLファイルが使われることが多いので、対応していると助かる。

  • WebサーバーがIIS。
    定番のWebサーバーApacheが使えない。
    PHPの入門書やフレームワークはApacheを前提としていることが多いと思うので、ちょっと心配。

まとめ

とにかく導入が簡単。

PHPの統合開発環境として人気のあるNetBeansやEclipseは、PHPやWebサーバーを別途インストールして、開発環境に使用するPHPの場所を設定する必要がある。
WebMatrix2ではそのような導入作業は不要で、設定ミスなどのトラブルも発生しない。

統合開発環境の導入・設定に時間をかけたくない人にはお勧め。

ちょっとPHPをいじってみるときには、とても便利だと思う。

Delphiのクラスのコンストラクタのデフォルト引数がC++Builderでは反映されない件

概要

Delphiのクラスのコンストラクタのデフォルト引数がC++Builderでは反映されない。

検証環境

RAD Studio XE3 Update2で確認しました。
ターゲットプラットフォームは、32ビットWindows・64ビットWindowsの両方です。

再現方法

  1. Delphiでコンストラクタにデフォルト引数を持つクラスを作成する。
    type
      TSample = class
      public
        constructor Create(I: Integer=100);
      end;
    
  2. C++Builderにユニットを追加してプロジェクトをコンパイルする。

作成されたhppファイルには、コンストラクタのデフォルト引数が反映されていない。

    class PASCALIMPLEMENTATION TSample : public System::TObject
    {
        typedef System::TObject inherited;
    public:
        __fastcall TSample(int I);
    public:
        /* TObject.Destroy */ inline __fastcall virtual ~TSample(void) { }
    };

備考

なお、コンストラクタではなく、メンバ関数であればデフォルト引数は反映される。

Delphiの次のクラスをC++Builderでコンパイルすると、

type
  TSample = class
  public
    procedure Func(I: Integer=100);
  end;

次のようなhppファイルが作成される。
デフォルト引数は反映されている。

class PASCALIMPLEMENTATION TSample : public System::TObject
{
    typedef System::TObject inherited;
public:
    void __fastcall Func(int I = 0x64);
public:
    /* TObject.Create */ inline __fastcall TSample(void) : System::TObject() { }
    /* TObject.Destroy */ inline __fastcall virtual ~TSample(void) { }
};

最後に

QCに登録していただけると助かります。

TListの項目が変更(追加・削除・抽出)されたことを知るには

TListは、項目が変更(追加・削除・抽出)されたときOnNotifyイベントが発生します。
OnNotifyイベントを使用すれば、変更(追加・削除・抽出)されたことを知ることができます。

サンプルアプリケーションでは、リストに項目を追加や削除などを行うと、メモ欄に変更内容を表示します。

000

/// <summary>リストに登録する項目</summary>
TMyItem = record
  ///   <summary>項目が作成された時間</summary>
  Time: string;
  constructor Create(ATime: TDateTime);
end;

TForm2 = class(TForm)
  …
private
  { Private 宣言 }
  FList: TList<TMyItem>;
  { Public 宣言 }
  ///   <summary>
  ///     項目がリストに追加または削除されたときに発生するイベント
  ///   </summary>
  ///   <param name="Item">
  ///     追加または削除された項目
  ///   </param>
  ///   <param name="Action">
  ///     変更のタイプ
  ///   </param>
  procedure MyNotify(Sender: TObject; const Item: TMyItem;
    Action: TCollectionNotification);
end;

フォームを作成するときに、リストのOnNotifyイベントにMyNotifyを設定します。
リストのに項目が追加・削除されるとMyNotifyが呼ばれます。。

procedure TForm2.FormCreate(Sender: TObject);
begin
  FList := TList<TMyItem>.Create;
  FList.OnNotify := MyNotify;
end;

MyNotifyイベントでは、リストの項目が変更されると、メモ欄に変更処理と項目を表示します。

procedure TForm2.MyNotify(Sender: TObject; const Item: TMyItem;
  Action: TCollectionNotification);
begin
  case Action of
    cnAdded:
      Memo1.Lines.Add('追加:' + Item.Time);
    cnRemoved:
      Memo1.Lines.Add('削除:' + Item.Time);
    cnExtracted:
      Memo1.Lines.Add('抽出:' + Item.Time);
  end;
end;

Addボタンを押すと、リストに項目を追加します。

procedure TForm2.ButtonAddClick(Sender: TObject);
begin
  Memo1.Clear;
  FList.Add(TMyItem.Create(Now));
end;

001

Removeボタンを押すと、リストの先頭の項目を削除します。

procedure TForm2.ButtonRemoveClick(Sender: TObject);
begin
  Memo1.Clear;
  FList.Delete(0);
end;

002

Extractedボタンを押すと、リストの先頭に項目を代入します。

procedure TForm2.ButtonExtractClick(Sender: TObject);
begin
  Memo1.Clear;
  FList.Items[0] := TMyItem.Create(Now);
end;

003

Clearボタンを押すと、リストの項目を削除します。

procedure TForm2.ButtonClearClick(Sender: TObject);
begin
  Memo1.Clear;
  FList.Clear;
end;

004