Php 将对象的公共属性转换为JSON的最快方法是什么
我的用例: 使用PDO从数据库中选择500行。 关闭仿真模式以获取本机数据类型 使用fetchObject'ClassName'获取行 现在我有了一个包含500个填充对象的数组,我想把它转换成JSON a.f.a.p 目前我正在使用以下方法:Php 将对象的公共属性转换为JSON的最快方法是什么,php,json,Php,Json,我的用例: 使用PDO从数据库中选择500行。 关闭仿真模式以获取本机数据类型 使用fetchObject'ClassName'获取行 现在我有了一个包含500个填充对象的数组,我想把它转换成JSON a.f.a.p 目前我正在使用以下方法: function get_object_public_vars($object) { return get_object_vars($object); } class Model implements \JsonSerializable { pu
function get_object_public_vars($object) {
return get_object_vars($object);
}
class Model implements \JsonSerializable {
public $property1;
public $property2;
private $property3;
public function jsonSerialize() {
return get_object_public_vars($this);
}
}
那我会的
// $dbStatement is a PDOStatement with a MySQL select query prepared
$a500objects = $dbStatement->fetchAll(\PDO::FETCH_CLASS, 'Model');
echo json_encode($a500objects);
现在我做了一些测试,如果我改为做$dbStatement->fetchAll;没有class_name参数。代码运行速度快得多,并且在选择更多行时会进行缩放
但是,我需要“模型”对象来实现一些应用程序逻辑。运行get_object_vars 500x似乎需要时间。即使使用OpCache
有人知道将类“Model”的对象解析为JSON的更快方法吗?您尝试过吗
公共函数jsonSerialize
{
回来
[
'property1'=>$this->property1,
'property2'=>$this->property2,
'property3'=>$this->property3,
];
}
使用fetchAll?虽然我不确定我是否理解您的问题,也不确定它是否与PDO有关。代码的缓慢部分是在转换为JSON或作为对象获取时。这里您讨论的是序列化对象,这里您讨论的是获取记录。这里你写的是$A500对象,它表示一个由500个对象组成的数组,这里是fetchObject'Model';当它返回单个对象时,PDO部分很快,查询大约需要1ms。我正在while循环中使用fetchObject。我应该在我的例子中写下fetchAll。性能上的区别在于,当作为“模型”进行抓取时,它必须经过jsonSerialize和get_object_vars,这是我分析此文件时必须花费时间的地方。我尝试了此方法以查看get_object_vars是否慢。令我惊讶的是,它的表现也一样。