我正在尝试将 SQL 表反序列化为 PHP 中的对象集合,但我不知道如何才能做到这一点。
在 C# 中,等效的是:
public class Object
{
public string objectProperty { get; set; }
public string anotherProperty { get; set; }
}
public void Deserialize()
{
List<Object> collection = new List<Object>();
// Assuming that we have an SQL statement returning a row
foreach (Row row in returnedSqlRow)
{
collection.Add(new Object
{
objectProperty = row["objectProperty"],
anotherProperty = row["anotherProperty"]
});
}
}
这会给我一个很好的 Objects
集合。
在我的 PHP 中我有以下内容:
class Book {
public $CN; // cataloguenumber
public $title;
public $author;
public $description;
public $price;
public $enteredby;
}
我的 SQL 语句是:
$books = pg_query($conn, 'SELECT cataloguenumber, title, author, description, price, enterby FROM CSBooks');
我可以像这样轻松访问行中的每个值:
while($row = pg_fetch_row($books)) {
echo $row[0] . '<br>';
echo $row[1] . '<br>';
echo $row[2] . '<br>';
echo $row[3] . '<br>';
echo $row[4] . '<br>';
echo $row[5] . '<br>';
}
但我不知道如何创建对象集合并将该行反序列化为 Book
对象并存储它。有等效的PHP吗?我查看了 pg_fetch_object()
,但它似乎并不是我要找的东西。
最佳答案
我认为解决方案是使用 PDO 和 PDOStatement::fetchObject这将抽象所有 pg_* 函数并使您的数据库交互更易于管理。
默认情况下它将返回一个 stdObject 而不是一个数组,但您可以让它映射您的对象。
如果你真的需要使用 pg_* 函数而不是 PDO,那么会有一个肮脏的解决方案......(我很惭愧地提出它)
$a = ['a'=>'bla', 'b'=>1];
$shame = (object) $a;
然后在您的类中,您只需编写一个构造函数来将列绑定(bind)到对象字段...
关于php - 将 SQL 表反序列化为对象集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40907683/