"BOKU"のITな日常

還暦越えの文系システムエンジニアの”BOKU”は新しいことが大好きです。

PHP+eclipse:Pleiades All in One for PHP をインストール&動作確認

PHPの開発を始める最も手軽で簡単な方法のひとつとして、Pleiades All in One for PHPのインストール・環境構築・動作確認までやってみます。

f:id:arakan_no_boku:20190916151825j:plain

 

Pleiades All in Oneのダウンロードとインストール

 

 

ここの画面から入ります。(画像にリンク貼ってます)

mergedoc.osdn.jp

PHP用のFull Editionをダウンロードします。

自分の環境にあわせて、Windows 64版を選びます。

f:id:arakan_no_boku:20190916152114p:plain

ダウンロードしたら、任意のフォルダに解凍するだけでインストールは完了です。

超簡単ですが、上記サイトの下部に書いてある以下の注意事項だけは忘れずに・・。

eclipse.org にも記載されているとおり、Eclipseディレクトリ階層が深いため Windows のパスの長さ制限 MAX_PATH 260 文字を超えないようにドライブ直下などの浅いパスに解凍してください。

C:\ を指定した場合は C:\pleiades に解凍されます。

パッケージにもよりますが配置先のパスは 20 文字程度なら問題ありません。

一度も起動していない場合は解凍したディレクトリを移動したりリネームしても大丈夫ですが、解凍と同じくパス長さ制限を超えないようにしてください。

なお、Program Files、デスクトップ、ダウンロードなどアクセス制限があったり、パスに空白・日本語が含まれる可能性がある場所は正常に動作しない可能性があるため配置しないでください。

自分は、素直に7Zipで、C:\直下に解凍して、「C:\pleiades」にリネームしました。

 

とりあえずeclipsePHPのコードを書いて動かしてみよう

 

pleiadesフォルダの下に、eclipseフォルダがあります。

その下の「eclipse.exe」を実行します。

起動時にCMD画面が表示されて、「setup_xampp_no_pause.bat」が実行されます。

最初の1回だけですが。

PHP内臓サーバーで、eclipseから、PHPを実行できるようになっているので、ワークスペースは「../xampp/htdocs」のままにしときます。

変更はできるみたいですが、ややこしそうなので、とりあえず。

f:id:arakan_no_boku:20180829152915j:plain

 

とりあえず新規プロジェクトを作ります

 

とりあえず、新規プロジェクトを作ってみます。

新規>プロジェクトでダイアログを表示すると、2つの選択肢があります。

  • ComposerパッケージからPHPプロジェクト
  • PHPプロジェクト

f:id:arakan_no_boku:20180829155425j:plain

Composerとは、PHPのバージョン管理ツール(pythonのpipみたいなもの?)です。

推測するに、フレームワーク(Laravelとか)でプロジェクトを作る場合は、「ComposerパッケージからPHPプロジェクト」を使うみたいです。

でも、今回は使い捨ての動作確認コードなので、「PHPプロジェクト」にします。

プロジェクト名だけ(今回は適当にpracにしました)入力して「完了」します。

f:id:arakan_no_boku:20190916154024p:plain


 

サンプルプログラムを作って動かしてみる

 

せっかくなので、Classを定義して、なんとなくMVCっぽくやってみます。

まず、pracプロジェクトに「新規>フォルダ」で以下の3つのフォルダを作ります。

  • controller
  • models
  • views

f:id:arakan_no_boku:20190916154523p:plain

続いて、各フォルダの下に「新規>PHPファイル」で、PHPファイルを作ります。

  • controller/PracCtrl.php
  • models/PracModel.php
  • views/PracView.php

f:id:arakan_no_boku:20190916155132p:plain

 

 

ソースを書くにあたっての留意点とか

 

 

今回は、Viewにあたる「PracView.php」を実行して、ロジックをContorollerで、データ取得をModelで分担する感じでやってみます。

あと、Viewで使うCSSもありものの「bootstrap」を使って手抜きをします。

PHPのクラス・メソッドなんかの命名規則とかは・・よく知りません(笑)

なので、以下だけ注意してやりました。

  • クラス名とファイル名は一致させておく。(PracCtrl.phpにはPracCtrlクラス・・)
  • クラスは大文字ではじめて、メソッドは小文字ではじめる
  • キャメルケース(各要素・・単語の最初の文字を大文字にする)で命名する

どんなに適当な名前をつけても実行はできます。

でも、「クラス名とファイル名が一致してない」と、PHPUNITでエラーがでます。

そこだけは、きっちりあわせた方がいいです。 

さて、ソースです。

PracView.php

テーブル定義とPHPソース以外のHTML部分は、bootstrapのstarter templeteのコピーです。

getbootstrap.com

 

    <!doctype html>
<html lang="jp">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">

<title>first test</title>
</head>
<body>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<div class="container">
  <table class="table">
    <thead>
      <tr>
        <th>NO</th>
        <th>名前</th>
        <th>性別</th>
        <th>生年月日</th>
      </tr>
    </thead>
    <tbody>
<?php
    require("../controller/PracCtrl.php");
    $ctrl = new PracCtrl();
    $ar_tbl = $ctrl->getTableDataArray();
    foreach($ar_tbl as $row){
        print("<tr>");
        print("<th>".$row[0]."</th>");
        print("<td>".$row[1]."</td>");
        print("<td>".$row[2]."</td>");
        print("<td>".$row[3]."</td>");
        print("</tr>");
    }
    ?>
    </tbody>
  </table>
</div>
</body>
</html>

PracCtrl.php 
<?php
require("../models/PracModel.php");

class PracCtrl{
    private $flags;
    public function getTableDataArray(){
        $model = new PracModel();
        $flags = 0;
        return $model->getTableData();
    }
}
?>
PracModel.php 
<?php

class PracModel{

    public function getTableData(){
        $ar_tbl = array();
        $ar_tbl[] = array("1","テスト太郎","男性","1969/1/1");;
        $ar_tbl[] = array("2","テスト次郎","男性","1970/4/1");
        $ar_tbl[] = array("3","テスト三郎","男性","1971/5/1");
        $ar_tbl[] = array("4","テスト史郎","男性","1972/71/1");
        return $ar_tbl;
    }
}

?>

 

やってることは単純です。

DBからとってきたつもりで、4行分のデータを配列に収めて、それをコントローラクラス内で取得して返すメソッドを定義し、View内でコントローラクラスのインスタンスを作ってデータを取得して、foreachで回してテーブル表示しているだけです。

 

では実行してみます。

 

PracView.phpを選択、右クリックして実行>サーバーで実行を行います。

f:id:arakan_no_boku:20180830005901j:plain

 
最初の実行時のみ気を付ける非常に重要なことがあります

 

実行には、PHPビルトインサーバーを使います。

初回実行時のみ、こんなダイアログが開きます。

f:id:arakan_no_boku:20190916230405p:plain
ここで、非常に重要なこと。

それは。

サーバー名を必ず「半角」のみにしておくことです。

(上記例だと phpserver に書き換えてます)

デフォルトが「ローカルホストのPHPビルトインサーバー」みたいに全角文字で表示されるのですが、そのまま「次へ」を押してはいけません。

eclipseを終了させるまでは、それでも実行できます。

ですが、一旦eclipseを終わらせて立ち上げると「Post Startup..." 中に内部エラーが発生しました。 Could not initialize class org.eclipse.php.internal.debug.core.debugger.DebuggerSettingsManager」などのエラーメッセージが表示され、ビルトインサーバーでの実行が一切できなくなります。

こうなると・・もう悲惨です。

ワークスペースを新規に作り直すしかなくなります。

自分もはまって原因がわかるまで3時間位悩みました。

 ここだけは間違わないように・・。 

今回のソースの実行結果はこんな感じです。

f:id:arakan_no_boku:20190916230850p:plain

まあまあ、じゃないですかね。

次回は「PHPUNIT単体テスト」と「PHPデバッグ(ステップ実行やブレークポイント)」および「PHPソースのリファクタリング」をやってみます。

ではでは。