PHP __toArray() 或 __toObject() 覆盖?

标签 php class tostring overriding

是否有等价物可以从普通类中获取重组的标准化对象?与 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/

相关文章:

Java 问题 : Is it a method?

java - 类似于 Object.toString 的 C++ toString 运算符

c# - 隐式和显式 StringBuilder.ToString() 方法调用之间有什么区别?

php - 统一排列/分布数组项

php - 在 Laravel 中添加字符串类型的外键时出错

java - 如何在java中创建唯一ID

java - 对对象调用 toString

php - 使用 JOIN 查询速度慢

php - Angular 6/PHP 解析期间 Http 失败

java - Android 找不到类 java.awt.datatransfer.StringSelection?尝试将字符串放在剪贴板上