设为首页 收藏本站
查看: 454|回复: 0

[经验分享] PHP中的stdClass 【转】

[复制链接]

尚未签到

发表于 2015-8-25 11:02:19 | 显示全部楼层 |阅读模式
  如果所有的Class都应该存在于一个默认的层级中的话,那么最顶层应该是最为一般的Class,也就是说极为抽象的,每一个下层的Class均比其上层的Class(即父类)更加专门化。基于该思想,在PHP中,这个顶层的Class被命名为“stdClass”,且作为一个“Standard Class”,你可以把它看成是一个不含任何属性和方法的类。
  
  使用stdClass的目的: 在运行时添加属性到基对象(Base Object)

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



    [php] view plaincopyprint?

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



    [php] view plaincopyprint?

    • $guss = new stdClass;
    • $guss->location = 'Essex';
    • print "$guss->location/n";
    • $guss->location = 'Orchard';
    • 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?

    • 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);
    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?

    • $obj = new stdClass;
    • $obj->name = 'Adam Trachtenberg';
    • $obj->email = 'adam@example.com';
    • print pc_format_address($obj);
    $obj = new stdClass;$obj->name = 'Adam Trachtenberg';$obj->email = 'adam@example.com';print pc_format_address($obj);
  • 最后, 这种在运行时为一个空对象设置属性的用法,不难看出也会给我们带来一些问题,如你无法真正确定这个对象是谁,目的是什么。http://blog.iyunv.com/crazyjeff_liu/article/details/4046070

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-103953-1-1.html 上篇帖子: php生成html文件的多种方法介绍 下篇帖子: PHP获取Post的原始数据方法小结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表