こんにちは!
ナビゲータのEVEです。
価格:3,740円 |
本日は、昨日製造したクラスの解説をします。「独習PHP」を読んでから(*1)製造したのですが、???っという部分もあるので、そういう部分も紹介していきます。
[プログラム解説]
以下が苦労して作ったプログラムです。では、プログラムの頭から順をおって説明しましょう。
<&?php
/*************************************************
*【クラス名 】DB関連クラス
*【製 造 者】EVE
*【製造年月日】2023年3月1日
*【更新年月日】
*【 概 要 】
* データベースに関する基本的な機能を提供する
*************************************************/
class getDB {
//❶プライベート変数定義
private $setDb; //データベース名
private $setHost; //ホスト名
private $setChar; //文字コード
private $setUser; //ユーザ名
private $setPass; //パスワード
private $setPara; //接続条件を編集する
//❷パブリック変数定義
public $getDbConnect; //データベース接続オブジェクト
public $stmt; //ステートメント
public $processResult; //処理結果
public $processMessage; //処理メッセージ
/*************************************************
*【メソッド名】コンストラクタ
*【 引 数 】
* selectDb :データベース名
* selectHost :ホスト名
* selectChar :文字コード
* selectUser :ユーザー名
* selectPass :パスワード
*【製 造 者】EVE
*【製造年月日】2023年3月1日
*【更新年月日】
*【機能概要 】
* データベースを利用する場合の初期設定を行う
*************************************************/
public function __construct(string $selectDb, //データベース名
string $selectHost, //ホスト名
string $selectChar, //文字コード
string $selectUser, //ユーザー名
string $selectPass) { //パスワード
//変数定義
static $rtn = "";
//❸取得した変数を再定義する
$this->&setDb = $selectDb; //データベース名
$this->&setHost = $selectHost; //ホスト名
$this->&setChar = $selectChar; //文字コード
$this->&setUser = $selectUser; //ユーザー名
$this->&setPass = $selectPass; //パスワード
//❹接続条件を編集する
$this->&setPara = "mysql:dbname=".$this->&setDb."; host=".$this->&setHost."; charset=".$this->&setChar.";";
//❺データベースへ接続する
$rtn = $this->&connectDb();
}
/*************************************************
*【メソッド名】データべース接続メソッド
*【 引 数 】なし
*【返 却 値】正常時:データベース接続オブジェクト
* 異常時:false
*【製 造 者】EVE
*【製造年月日】2023年3月1日
*【更新年月日】
*【機能概要 】
* データベースへ接続する
*************************************************/
public function connectDb():PDO {
try {
//❻データベースへ接続する
$this->&getDbConnect = new PDO($this->&setPara ,$this->&setUser,$this->&setPass);
//❼データベース接続オブジェクト
return $this->&getDbConnect;
} catch (PDOException $e) {
//❽実行結果を格納する
$this->&processResult = false;
//❾例外メッセージを格納する
$this->&processMessage = $e->&getMessage();
//❿呼び出し元へ制御を移す
return $this->&processResult;
} finally {
//⓫データベースをクローズする
$getDbConnect = null;
}
}
/*************************************************
*【メソッド名】データベース検索メソッド
*【 引 数 】strSql :Sql文
*【返 却 値】なし
*【製 造 者】EVE
*【製造年月日】2023年3月1日
*【更新年月日】
*【機能概要 】
* 受け取った文字列でデータベースを検索する
*************************************************/
//データベースを検索する
public function selectDb(string $strSql) { //SQL文
//SQL文実行処理
try {
//⓬プリシェアードステートメント設定する
$this->&stmt = $this->&getDbConnect->&prepare($strSql);
//⓭検索を実行する
$this->&stmt->&execute();
//⓮処理結果を設定する
$this->&processResult = true; //返却値(正常)
} catch (PDOException $e) {
//検索が失敗した場合
//⓯処理結果を設定する
$this->&processResult = false; //返却値を設定する(異常)
//⓰異常処理結果のメッセージを設定する
$this->&processMessage = $e->&getMessage(); //返却値を設定する(メッセージ)
}
}
}
?>
❶では、プライべート変数を定義しています。これは、データベースへ接続するための情報を保持しています。データベースへの接続情報は、初回のみ使用するだけで、変更しない情報なので、プライベートで変数を保持しようとしています。もし、呼び出し元プログラムから情報へアクセスしたい場合、getterやsetterを使用して接続することになります。
❷では、パブリック変数を定義しています。ここの変数は、呼び出し元プログラムから参照・使用したいものを定義します。
このプログラムの特徴となりますが、このクラスの処理結果をprocessResult、processMessageへ格納し、このクラスのすべての処理を制御しようとしています。
❸からは、コンストラクタの解説になります。❸では、呼び出し元でインスタンス作成時に設定した引数を、プライベート変数として再定義しています。カプセル化っぽいデータの扱いにしたいという意図があります。
❹では、❸で取得した情報を基に、接続する条件を編集しています。
❺では、データベースへ接続しています。ここで悩んだ点は、返却値を取得したのだけれど、何もできない点・・・。「独習PHP」では、返却値は返してはいけませんって書いてあったので、返却値を返していないのですが、なんか、間抜けです。なお、返却値を指定してもエラーになりません(笑)。
❻からは、データベースへ接続するためのメソッドの説明になります。❻では、データベースへ接続するためのインスタンスを作成しています。
❼では、取得したデータベース接続オブジェクトを返却しています。ここで返却値を指定しないとエラーになります。
❽では、パブリックプロパティへ、処理結果、異常、falseを設定しています。
❾では、パブリックプロパティへ、メッセージ、異常メッセージを設定しています。
❿プロパティに設定した処理結果を返却値をセットし、呼び出し元へ制御を移しています。ここでもやはり、返却値の指定をしないと、エラーになります。
⓫このオブジェクトが消滅するときの最後の処理を指定しています。ここでは、データベースをクローズしています。
[あとがき]
解説が途中ですが、本日の解説はここまでとさせていただきます。明日、続きを解説したうえで、いつもどんなところを気にしながらプログラムを製造しているのか、お話しましょう!
では、また!!!
*1)まだ、すべて読み終えていません。
【このカテゴリーの最新記事】