cj5*_*cj5 1 php overriding class tostring
是否有相当于从正常类中获取重组的标准化对象?与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();
}
Run Code Online (Sandbox Code Playgroud)
在php 5.4及以上版本中,如果你的类是impliments 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);
Run Code Online (Sandbox Code Playgroud)
将打印:
{"foo":"hello","name":"MyClass"}
Run Code Online (Sandbox Code Playgroud)