• 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
          )
    )
  • 相关阅读:
    uvalive 3971 Assemble
    poj 1064 Cable master
    1130mysql explain中的type列含义和extra列的含义
    1128ORDER BY的原理
    1125Sending data
    1125MySQL Sending data导致查询很慢的问题详细分析
    1125mysqbinlog日志
    1122Shell脚本之利用mysqldump备份MySQL数据库
    1122从业务优化MYSQL
    1122MySQL性能优化之 Nested Loop Join和Block Nested-Loop Join(BNL)
  • 原文地址:https://www.cnblogs.com/tinywan/p/16337537.html
Copyright © 2020-2023  润新知