私の質問に光を当てることができることを願っています。私が必要としているのは、基本的に、データベース行からプロパティを取得して割り当てるベスト プラクティス (インスタンス ゲッター) です。これはかなり標準的な問題であり、C# でどのように機能するかは知っていますが、php で同様の結果を達成する方法が不明であり、私のニーズをカバーするソリューションをオンラインで見つけていません。
したがって、この単純化されたコードがあると仮定しましょう。
Class User{
private $Pdo;
private $UserID;
private $UserName;
function GetUserName(){
return $this->UserName;
}
function GetUserInfo(){
// return user object with given user id, in this example just use "1"
$Pdo = $this->Pdo;
$Query = $Pdo->query('select * from User where UserID = 1');
$Query->setFetchMode(PDO::FETCH_CLASS, "User", array($Pdo) ); // this is returning object
$UserInfo = $Query->fetch();
return $UserInfo;
}
}
次に、ユーザーオブジェクトを取得したいときは、次のように呼び出します。
$User = new User($Pdo);
$UserInfo = $User->GetUserInfo();
echo $UserInfo->GetUserName();
これはうまくいきますが、私はこのようにするのは好きではありません。1 つのオプションは、静的メソッドを使用することです。そのため、最終的には次のようになります。
$UserInfo = User::GetUserInfo()
これは「シングルトン」(編集:シングルトンではありません:))と呼ばれ、一般的に悪い習慣として知られています。
私の質問は、それがどのように見えるべきかということです? 私がしたいのはこれです:
$UserInfo = new User($Pdo);
$UserInfo->GetUserInfo();
echo $UserInfo->GetUserName();
GetUserInfo メソッドでは、次のように値を現在のオブジェクト ($this) に手動で割り当てることができることを知っています。
function GetUserInfo(){
// get data from db
$this->UserName = "John"; // this value I will get from db
}
ただし、FetchClass を使用したいので、名前に基づいてすべてのプロパティを 1 行で取得し、手動で割り当てる必要はありません。私の問題が何であるかを理解していただければ幸いです :) これを行う最善の方法について、ご意見をお待ちしております。
ご意見をお寄せいただきありがとうございます。