gpt4 book ai didi

PHP __toArray() 或 __toObject() 覆盖?

转载 作者:行者123 更新时间:2023-12-04 20:47:47 25 4
gpt4 key购买 nike

是否有等价物可以从普通类中获取重组的标准化对象?与 PHP 的 __toString() 覆盖方法相同的东西。

好的,所以我有这个方法,它抓取一堆站,并返回一个对象模型,它处理一堆其他方法来获取其他相关数据。因此,在这种情况下,当我调用包含位置“$locations”的对象时,我想取回对象属性的平面关联数组,或者可以轻松编码为 JSON 的对象数组。如果我得到一个位置对象数组,我只想将 $location 直接转换为 JSON 字符串。就像我将 $location 称为包含 __toString() 的位置对象一样,它会自动生成一个字符串表示。在这种情况下,我想要一个标准对象或数组,而不是一个字符串。有没有办法做到这一点?

下面的代码示例:

public function stnSearch() {
$locations = DBO::getInstance()->query("
SELECT " . DBO_Location::COLUMNS . "
FROM " . DBO_Location::TABLE_NAME . " AS a
WHERE a.title LIKE '%" . $_REQUEST['query'] . "%'
")->fetchAll(PDO::FETCH_CLASS, DBO_Location::MODEL);

Util::debug($locations); // want this to produce a standard object for each model without having to do an additional loop

exit();
}

最佳答案

在 php 5.4 及更高版本中,如果您的类实现 JsonSerializable ,您可以添加 jsonSerialize json_encode 将调用的方法:

<?php
class MyClass implements JsonSerializable
{
public $foo;

public function jsonSerialize() {
return array(
"foo"=>$this->foo,
"name"=>"MyClass"
);
}
}

$x = new MyClass();
$x->foo = "hello";
echo json_encode($x);

将打印:
{"foo":"hello","name":"MyClass"}

关于PHP __toArray() 或 __toObject() 覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20134836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com