简介
stdClass
是 PHP 中的空类,用于将其他类型转换为对象。它类似于 Java 或 Python 对象。 stdClass 不是对象的基类
转换为对象
如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,将会创建一个内置类 stdClass
的实例。如果该值为 null,则新的实例为空。 array
转换成 object
将使键名成为属性名并具有相对应的值。注意:在这个例子里, 使用 PHP 7.2.0 之前的版本,数字键只能通过迭代访问。
stdClass() 的定义
stdClass
是PHP的一个基类,几乎所有的类都继承这个类,任何时候都可以被new,可以让一个变量成为一个对象(object)。- 所有使用 new stdClass 的变量,都不能使用方法,即不可能出现
$a->text()
的情况 stdClass
在 php5 版本开始流行起来的,低于php5的版本,尽量或不使用此方法(好像这一条是多余的)
stdClass() 的用途
- stdClass通过调用它们直接访问成员。
- 它在动态对象中很有用。
- 它用于设置动态属性等。
stdClass 类的使用
1、存储数据
(1)数组存储
| |
| $personal_array = [ |
| "name" => "Tinywan", |
| "home" => "www.tinywan.com", |
| "address" => "ZheJiang HangZhou" |
| ]; |
| |
| |
| print_r($personal_array); |
输出内容
| Array |
| ( |
| [name] => Tinywan |
| [home] => www.tinywan.com |
| [address] => ZheJiang HangZhou |
| ) |
(2)stdClass存储:使用 stdClass 而不是数组来存储个人详细信息(动态属性)
| $personal_object = new stdClass(); |
| $personal_object->name = "Tinywan"; |
| $personal_object->home = "www.tinywan.com"; |
| $personal_object->address = "ZheJiang HangZhou"; |
| |
| |
| print_r($personal_object); |
输出内容
| stdClass Object |
| ( |
| [name] => Tinywan |
| [home] => www.tinywan.com |
| [address] => ZheJiang HangZhou |
| ) |
注意:数组到对象和对象到数组的类型转换是可能的。
(3)将数组转换为对象
| $personal_array = [ |
| "name" => "Tinywan", |
| "home" => "www.tinywan.com", |
| "address" => "ZheJiang HangZhou" |
| ]; |
| $personal_object = (object) $personal_array; |
| |
| |
| print_r($personal_object); |
输出内容
| stdClass Object |
| ( |
| [name] => Tinywan |
| [home] => www.tinywan.com |
| [address] => ZheJiang HangZhou |
| ) |
(4)将对象属性转换为数组
| $personal_object = new stdClass(); |
| $personal_object->name = "Tinywan"; |
| $personal_object->home = "www.tinywan.com"; |
| $personal_object->address = "ZheJiang HangZhou"; |
| |
| $personal_array = (array) $personal_object; |
| |
| print_r($personal_array); |
输出内容
| Array |
| ( |
| [name] => Tinywan |
| [home] => www.tinywan.com |
| [address] => ZheJiang HangZhou |
| ) |
2、动态增加属性
| $personal_object = new stdClass(); |
| $personal_object->name = "Tinywan"; |
| $personal_object->home = "www.tinywan.com"; |
| $personal_object->address = "ZheJiang HangZhou"; |
| print_r($personal_object); |
| |
| |
| $personal_object->age = 24; |
| $personal_object->schoole = "GanZhengFa"; |
| print_r($personal_object); |
输出
| stdClass Object |
| ( |
| [name] => Tinywan |
| [home] => www.tinywan.com |
| [address] => ZheJiang HangZhou |
| ) |
| stdClass Object |
| ( |
| [name] => Tinywan |
| [home] => www.tinywan.com |
| [address] => ZheJiang HangZhou |
| [age] => 24 |
| [schoole] => GanZhengFa |
| ) |
stdClass 并不是 PHP 中对象的基类
这里需要注意的是,尽管是泛型类,stdClass 并不是 PHP 中对象的基类,我们可以使用 instanceof 关键字来证明这一点。
| class Tinywan{ |
| |
| } |
| |
| $objClass = new Tinywan(); |
| if ($objClass instanceof \stdClass){ |
| echo 'Yes'; |
| } else { |
| echo 'No'; |
| } |
输出结果:No
这阐明了 stdClass
不是 PHP 中对象的基类
3. json_encode() 和 json_decode()
json_encode()
和 json_decode()
是专门用于对 JSON
字符串执行操作的函数。json_encode()
用于将 Array 转换为 JSON
字符串 。因此,首先,我们将一个对象转换为 JSON 字符串,然后使用 json_decode()
将其转换为对象。
| $empInfo = array( |
| 'name'=>'John', |
| 'address'=>'Houston', |
| 'employment' => array( |
| 'id' => '1', |
| 'address' => 'Los Angeles' |
| ) |
| ); |
| print_r(json_decode(json_encode($empInfo))); |
输出结果
| stdClass Object |
| ( |
| [name] => John |
| [address] => Houston |
| [employment] => stdClass Object |
| ( |
| [id] => 1 |
| [address] => Los Angeles |
| ) |
| ) |