我希望你们能对我的问题有所了解。我需要的基本上是从数据库行(实例获取器)获取和分配属性的最佳实践。这是一个非常标准的问题,我知道它在 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();
这行得通,但是我不喜欢这样做。一种选择是使用静态方法,所以最后我会得到类似的结果:
$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,这样我就可以在一行中根据它们的名称获取所有属性,而不是手动分配它们。我希望你明白我的问题是什么:) 我很想听听你对什么是最好的方法的意见。
非常感谢您的任何意见。