简介:stdclass具有动态属性的通用空类。可实现数据存储,数组转对象等功能
对于 stdclass 官方文档介绍它是具有动态属性的通用空类。此类的对象可以使用 new 实例化,也可以通过类型转换为对象创建。几个 PHP 函数也会创建此类的实例,比如 json_decode()、mysqli_fetch_object() 或 PDOStatement::fetchObject()。
通俗的说,他就是PHP中的空类,用于将其他类型转换为对象。比如数组,字符串等转换成一个自定义的对象,常见的有json_decode(),将字符串json格式的数据转换成一个对象形式
下面我针对不同使用场景来分析一下stdclass
PHP开发过程中存储数据用的最多的时数组,但是我们还可以使用对象来存储。如果不想自己自定义一个类,来存储数据,就可以使用 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
)
1.2 对象存储
$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
)
当然,数组和stdclass之间是可以互相转换。数组转stdclass对象非常方便,直接使用(object)进行强转即可:
$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
)
对象转数组也是一样的
$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
)
这里需要注意的是,尽管是泛型类,stdClass 并不是 PHP 中对象的基类,我们可以使用 instanceof 关键字来证明这一点。
class Tinywan{
}
$objClass = new Tinywan();
if ($objClass instanceof \stdClass){
echo 'Yes';
} else {
echo 'No';
}
输出结果:No
结果证明,stdclass并不是PHP的基类
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
)
)
有遗漏或者不对的可以在我的公众号留言哦