0

嗨,我有一个问题。当我在实现一些代码时,我达到了我需要在每个对象中使用 toJson 方法的地步

所以在课堂上我添加了这段代码

public function toJson(){
   return json_encode($this);  // $this which refers to the current object 

}

它刚刚返回,{}所以我知道它无法识别此类的属性,所以我尝试像那样转换它

public function toJson(){
   $array=(array)$this;
   return json_encode($array);

}

我得到了奇怪的结果

string '{"\u0000Response\u0000status":0,"\u0000Response\u0000data":null,"\u0000Response\u0000error":" type non valide "}' (length=112)

我最终可以编写自定义的 json 对象

像这样

 public function toJson(){
       $myjson="{field1:data1,field2:data2}";
       return $myjson;

    }

但我不想每次添加新属性时都返回它

如果您对为什么转换不起作用有任何想法,我将不胜感激

4

2 回答 2

1

这种用法适用于基元、数组、关联数组和对象:

<?php

class Test {
  var $a = "1";
  var $b = array(3, 5, "cat", "monkey");
  var $c = array("animal" => "dromedary");
  public function toJson() {
    return json_encode($this);
  }
}

$test = new Test();
$test->d = new Test();
echo $test->toJson();

?>

运行它会产生预期的 JSON 输出:

$ php test.php 
{"a":"1","b":[3,5,"cat","monkey"],"c":{"animal":"dromedary"},"d":{"a":"1","b":[3,5,"cat","monkey"],"c": {"animal":"dromedary"}}}

我仍在运行 PHP 5.3.15。

于 2013-10-06T15:11:53.540 回答
1

在编码为 JSON 之前,您需要将对象属性转换为数组:

public function toJson(){
   return json_encode(get_object_vars($this));
}

如您所见,您可以使用get_object_vars来完成此操作。

于 2013-10-06T15:08:28.227 回答