PHP中的stdClass是什么?有什么作用?

简介:stdclass具有动态属性的通用空类。可实现数据存储,数组转对象等功能

对于 stdclass 官方文档介绍它是具有动态属性的通用空类。此类的对象可以使用 new 实例化,也可以通过类型转换为对象创建。几个 PHP 函数也会创建此类的实例,比如 json_decode()、mysqli_fetch_object() 或 PDOStatement::fetchObject()。

通俗的说,他就是PHP中的空类,用于将其他类型转换为对象。比如数组,字符串等转换成一个自定义的对象,常见的有json_decode(),将字符串json格式的数据转换成一个对象形式

下面我针对不同使用场景来分析一下stdclass

1、数据存储

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
)

2、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()与stdclass的关系

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
      )
)

有遗漏或者不对的可以在我的公众号留言哦

编程经验共享公众号二维码

编程经验共享公众号二维码
更多内容关注公众号
Copyright © 2021 编程经验共享 赣ICP备2021010401号-1