PHP系列 | PHP中的stdClass是什么?
简介
stdClass 是 PHP 中的空类,用于将其他类型转换为对象。它类似于 Java 或 Python 对象。 stdClass 不是对象的基类
转换为对象
如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,将会创建一个内置类 stdClass
的实例。如果该值为 null
,则新的实例为空。 array 转换成 object 将使键名成为属性名并具有相对应的值。注意:在这个例子里, 使用 PHP 7.2.0 之前的版本,数字键只能通过迭代访问。
stdClass() 的定义
1、stdClass是PHP的一个基类,几乎所有的类都继承这个类,任何时候都可以被new,可以让一个变量成为一个对象(object)。
2、所有使用 new stdClass 的变量,都不能使用方法,即不可能出现 $a->text() 的情况
3、stdClass 在 php5 版本开始流行起来的,低于php5的版本,尽量或不使用此方法(好像这一条是多余的)
stdClass() 的用途
1、stdClass通过调用它们直接访问成员。
2、它在动态对象中很有用。
3、它用于设置动态属性等。
stdClass 类的使用
1、存储数据
(1)数组存储
1 // 定义数组存储个人信息
2 $personal_array = [
3 "name" => "Tinywan",
4 "home" => "www.tinywan.com",
5 "address" => "ZheJiang HangZhou"
6 ];
7
8 // 显示数组内容
9 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 中对象的基类
使用 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
)
)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构