3

PHP系列 | PHP中的stdClass是什么? - Tinywan

 1 year ago
source link: https://www.cnblogs.com/tinywan/p/16337537.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

简介

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK