欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

对象转换成JSON字符串

程序员文章站 2022-05-04 13:19:25
定义一个Student类: 此时new一个对象并直接echo: 1 $person1 = new Student('jack', 20); 2 echo $person1; 结果并没有按照我们预想的那样打印出该对象而是报了一个致命错误: 意为Student类实例化出来的对象不能转化成字符串,此处可以 ......

定义一个Student类:

1 class Student {
2     public $name;
3     public $age;
4     function __construct($name, $age) {
5         $this->name = $name;
6         $this->age = $age;
7     }
8 }

此时new一个对象并直接echo: 1 $person1 = new Student('jack', 20); 2 echo $person1; 

结果并没有按照我们预想的那样打印出该对象而是报了一个致命错误:

对象转换成JSON字符串

意为Student类实例化出来的对象不能转化成字符串,此处可以得到一个信息即:echo 后面必须是字符串,

否则会将其自动转化为字符串,那么如何讲一个对象转换为一个字符串呢?

先介绍一个魔术方法:__tostring(),这个方法用于一个类被当成字符串时应怎样回应。例如 echo $obj; 

应该显示些什么。此方法必须返回一个字符串,否则将发出一条 E_RECOVERABLE_ERROR 级别的致命错误。

将这个魔术方法添加到Student类中:

 1 class Student {
 2      public $name;
 3      public $age;
 4      function __construct($name, $age) {
 5           $this->name = $name;
 6           $this->age = $age;
 7      }
 8      function __tostring() {
 9           return json_encode($this, JSON_FORCE_OBJECT);
10      }
11 }

json_encode(value, options)方法可以将一个对象转换为JSON字符串,此方法接受两个参数,

第一个参数:value 
待编码的 value ,除了resource 类型之外,可以为任何数据类型 
该函数只能接受 UTF-8 编码的数据 

第二个参数:options 
由以下常量组成的二进制掩码: JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_UNESCAPED_UNICODE. 

返回值:编码成功则返回一个以 JSON 形式表示的 string 或者在失败时返回 FALSE 。

note:与json_encode方法相对的有json_decode方法,此方法可以将一个JSON格式的字符串转化为PHP变量,此方法接受两个参数

      第一个参数:json字符串

      第二个参数:true/false,为true时表示将字符串准换位数组,为false时则表示转换为对象,默认为false

      返回值:对象或数组(第二个参数为为true时)

此时在浏览器打开可以看到转换成功:

对象转换成JSON字符串