zoukankan      html  css  js  c++  java
  • PHP中的stdClass

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

        在PHP内核进行模块初始化操作时会自动加载这个函数, 这样,stdClass类的注册操作也就会被执行了。stdClass类是一个没有成员变量也没有成员方法的类。 它的所有的魔术方法,父类、接口等在初始化时都被设置成NULL。由于在PHP中对于一个类我们无法动态的添加方法, 所以这个类只能用来处理动态属性,这也是我们一种常见的用法。故一下方法不会触发__set拦截器

    
    

      $page=new stdClass();

    
    

      $page->name='Home';

    
    

      $page->status=1;

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

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

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

      1. $guss = new stdClass;
      2. $guss->location = 'Essex';
      3. print "$guss->location/n";
      4. $guss->location = 'Orchard';
      5. print "$guss->location/n";
    方法,无论如何在一个对象被初始化之后再去定义它。但是在你想使用一个像从数据库结果集中提取出来的对象(mysql_fetch_object方法,毕竟在调用它是你并不像真正地去请求数据库)这样的一般对象时,创建 stdClass 对象是非常有用的。如下:
    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方法,应该如何使用呢?
    $obj = new stdClass;
    $obj->name = 'Adam Trachtenberg';
    $obj->email = 'adam@example.com';
    print pc_format_address($obj);

  • 相关阅读:
    Backbone.js 1.0.0源码架构分析(一)
    汤姆大叔的博客(深入理解JavaScript系列(2):揭秘命名函数表达式)
    求职之路(拿到百度、美团、趋势科技、华为offer)
    请大家注意这个网站www.haogongju.net
    后缀数组求最长重复子串
    2015阿里在线笔试题求两个字符串的最长子串
    剑指offer42:翻转单词顺序 VS 左旋转字符串(更高效、简便的解法)
    求和为s的连续正数序列
    数组中的逆序对
    求一串字符串的全排列和所有组合
  • 原文地址:https://www.cnblogs.com/fyy-888/p/5431014.html
Copyright © 2011-2022 走看看