PHP\uuuuToArray()或\uuuuToObject()重写?

PHP\uuuuToArray()或\uuuuToObject()重写?,php,class,tostring,overriding,Php,Class,Tostring,Overriding,是否存在从普通类获得重新组织的标准化对象的等价物?它与PHP的_utoString()重写方法的工作原理相同 好的,我有一个方法,它获取一组站点,并返回一个对象模型,它处理一组其他方法来获取其他相关数据。因此,在本例中,当我调用包含位置“$locations”的对象时,我希望返回一个对象属性的平面关联数组,或者一个可以轻松编码为JSON的对象数组。如果我得到一个location对象数组,我只希望$location直接转换为JSON字符串。就像我引用$location作为包含_toString()

是否存在从普通类获得重新组织的标准化对象的等价物?它与PHP的_utoString()重写方法的工作原理相同

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

代码示例如下:

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();
}

谢谢大家的反馈!最后,我不得不在每个类中创建一个标准方法(一个用于toArray(),一个用于toJSON())。这不是理想的解决方案,但必须这样做

toArray()方法将复杂类展平,使数组具有toObject()或toJSON()可用于摘要的属性。例如,我有一些方法可以将输出数据格式化为HTML,而这些方法不会自动设置为类中的本地属性,因此我需要手动设置。通过我上面提到的方法

toArray()示例:

要获取JSON对象,请执行以下操作:

public static function toJSON($logs) {
    $b = self::toArray($logs);

    return json_encode($b);
}

同样,这不是期望的结果,但它完成了任务。理想情况下,如果子类中存在需要处理的无关属性,我希望能够在父类中建立一个可以重写的方法。

在PHP5.4及更高版本中,如果您的类实现了
JsonSerializable
,您可以添加一个将由
json\u encode
调用的
jsonSerialize
方法:

<?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);

显示所需行为的示例。您的意思是想从自定义类中获取一个
stdClass
对象,例如该自定义类实例集的所有属性?toString将帮助您将类中的任何内容转换为字符串返回。我有一个类中的选择性属性,我希望将其作为标准对象返回,因为我需要用于AJAX调用的JSON,并且我无法直接访问从Javascript返回此信息的PHP方法。@ChrisWalsh如果您试图从所选类属性生成JSON输出,为什么不只指定一个自定义的
\uuu toString()
方法,该方法使用您感兴趣的属性构建一个
stdClass
对象,然后返回该对象的JSON编码?或者只需实现自己的
toJSON()
方法。@MikeBrant这是个好主意。我想避免使用uu-toString,因为它已经在做其他事情了,但是我想仅仅创建toJson对象是可行的。
<?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"}