1

私の質問に光を当てることができることを願っています。私が必要としているのは、基本的に、データベース行からプロパティを取得して割り当てるベスト プラクティス (インスタンス ゲッター) です。これはかなり標準的な問題であり、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 行で取得し、手動で割り当てる必要はありません。私の問題が何であるかを理解していただければ幸いです :) これを行う最善の方法について、ご意見をお待ちしております。

ご意見をお寄せいただきありがとうございます。

4

1 に答える 1