如果所有的Class都应该存在于一个默认的层级中的话,那么最顶层应该是最为一般的Class,也就是说极为抽象的,每一个下层的Class均比其上层的Class(即父类)更加专门化。基于该思想,在PHP中,这个顶层的Class被命名为“stdClass”,且作为一个“Standard Class”,你可以把它看成是一个不含任何属性和方法的类。

使用stdClass的目的: 在运行时添加属性到基对象(Base Object)

  1. 问题
    你想创建一个对象,并在其中添加一些属性,但是你却不想把它作为一个明确的类正式地定义它。这一点在一些情况下是相当有用的,例如当你需要定义一个方法来返回带有某些属性(不确定的)的对象时,就如同从mysql_fetch_object( ) 或者 imap_header( )的使用一样。
  2. 解决方案
    使用PHP内建类,stdClass:

    [php] view plaincopyprint?
    1. $pickle = new stdClass;
    2. $pickle->type = 'fullsour';

    $pickle = new stdClass; $pickle->type = 'fullsour';

  3. 讨论
    创建一个stdClass类型的对象,其不含有任何属性和方法,就像array( )返回一个空数组一样。
    你可以为其创建一个新的属性并分配给它某个值,然后检查它的值。

    [php] view plaincopyprint?
    1. $guss = new stdClass;
    2. $guss->location = 'Essex';
    3. print "$guss->location/n";
    4. $guss->location = 'Orchard';
    5. print "$guss->location/n";

    $guss = new stdClass; $guss->location = 'Essex'; print "$guss->location/n"; $guss->location = 'Orchard'; print "$guss->location/n";
    方法,无论如何在一个对象被初始化之后再去定义它。但是在你想使用一个像从数据库结果集中提取出来的对象(mysql_fetch_object方法,毕竟在调用它是你并不像真正地去请求数据库)这样的一般对象时,创建 stdClass 对象是非常有用的。如下:

    [php] view plaincopyprint?
    1. function pc_format_address($obj) {
    2. return "$obj->name <$obj->email>";
    3. }
    4. $sql = "SELECT name, email FROM users WHERE id=$id";
    5. $dbh = mysql_query($sql);
    6. $obj = mysql_fetch_object($dbh);
    7. print pc_format_address($obj);

    function pc_format_address($obj) { return "$obj->name <$obj->email>"; } $sql = "SELECT name, email FROM users WHERE id=$id"; $dbh = mysql_query($sql); $obj = mysql_fetch_object($dbh); print pc_format_address($obj);
    pc_format_address方法使用一个对象的name 和 email 属性,然后使其格式化后返回(如上代码)。下面我们不调用mysql_fetch_object方法,应该如何使用呢?

    [php] view plaincopyprint?
    1. $obj = new stdClass;
    2. $obj->name = 'Adam Trachtenberg';
    3. $obj->email = 'adam@example.com';
    4. print pc_format_address($obj);

    $obj = new stdClass; $obj->name = 'Adam Trachtenberg'; $obj->email = 'adam@example.com'; print pc_format_address($obj);

  4. 最后, 这种在运行时为一个空对象设置属性的用法,不难看出也会给我们带来一些问题,如你无法真正确定这个对象是谁,目的是什么。http://blog.csdn.net/crazyjeff_liu/article/details/4046070

转载于:https://www.cnblogs.com/ellisonDon/archive/2012/11/19/2777010.html

PHP中的stdClass 【转】相关推荐

  1. PHP5中的stdClass

    PHP5中新增stdClass 官方手册参考:http://www.php.net/manual/en/language.oop5.basic.php#92123 stdClass类是PHP的一个内部 ...

  2. php 文件迭代对象,通过PHP中的stdClass对象进行迭代

    我有一个这样的对象: stdClass Object ( [_count] => 10 [_start] => 0 [_total] => 37 [values] => Arr ...

  3. PHP中遍历stdclass object 及 json 总结[中国航天神舟十号以json形式向地面返回数据]...

    $test=Array ( [0] => stdClass Object ( [tags] => 最快的车,Bloodhound,SSC [id] => 48326888 11 从网 ...

  4. 浅析php中的stdClass

    在php的开发过程中(php5以后),我们经常会遇到stdClass这个类,现在就顺便说一下我对stdClass的认识: $user = new stdClass(); $user->name ...

  5. php 读取stdclass,json - 在php中读取stdclass的问题?

    例如: array(3) { [0]=> object(stdClass)#6 (2) { ["id"]=> string(1) "1" [&quo ...

  6. PHP中把stdClass Object转array的几个方法

    2019独角兽企业重金招聘Python工程师标准>>> 方法一: //PHP stdClass Object转array function object_array($array) ...

  7. php stdclass,php中new stdclass()用在什么场景

    我常用在保存数据 主要是开销比较小 $obj = new stdClass; $obj->test = 'abc'; $obj->other = 6.2; $obj->arr = a ...

  8. php里的stdclass,PHP中的stdClass是什么?

    stdClass是另一个很好的PHP特性.您可以创建一个匿名PHP类.让我们检查一个例子.$page=new stdClass();$page->name='Home';$page->st ...

  9. PHP的stdClass

    概述 以下是百度百科对php中的 stdClass的描述: stdClass在PHP5才开始被流行.而stdClass也是zend的一个保留类.**stdClass类是PHP的一个内部保留类,初始时没 ...

最新文章

  1. 【HeadFirst设计模式】8.模板方法模式
  2. 拜占庭将军问题与中本聪
  3. 476. 数字的补数 【位运算】
  4. iOS经典面试题之深入分析“内存平移”的原理
  5. Redis 缓存常见问题 :缓存雪崩,缓存击穿,缓存穿透,缓存预热
  6. 收藏 : 50个Excel逆天功能,一秒变“表哥”
  7. mathcal 对应于什么库_数据库理论
  8. MySql8.0.11的安装与使用
  9. Codeforces 446C. DZY Loves Fibonacci Numbers【斐波那契+线段树】
  10. git bitbucket_如何在Bitbucket上创建新的Git存储库并查看提交的对象
  11. oracle blob 限制大小_Oracle的INSTANCE CAGING在数据库资源池中的作用
  12. 临近失业,如何拯救自己?
  13. 听歌用什么降噪耳机好?骑行抗风噪最好的蓝牙耳机
  14. 《你的善良必须有点锋芒》-慕言歌
  15. java编程兔子问题_JAVA编程题-用java解决兔子问题
  16. 中级响应代表什么事件_15万预算,能买到合格的中级轿车吗?
  17. java实现弹幕效果_css3实现蒙版弹幕功能
  18. js-js数据结构和算法-树
  19. 【Keil】Error: Flash Download failed - Target DLL has been cancelled
  20. 某MDU产品OMCI软件升级加速方案

热门文章

  1. [react] 怎么定时更新一个组件?
  2. [vue] vue组件会在什么时候下被销毁?
  3. [vue]vue渲染模板时怎么保留模板中的HTML注释呢?
  4. 前端学习(2810):完成安卓打包
  5. 工作252:uniapp--实战--uview---tabber
  6. 工作125:各个接口需要的token不同 token是获取数据的关键
  7. 前端学习(2513):组件css作用域
  8. 10. HTML基本标签
  9. Qt 编写应用程序升级的配置文件json 生成工具
  10. CSS之容器按比例缩放