PHP中的stdClass

本文介绍如何使用PHP内置的stdClass类来创建可在运行时动态添加属性的对象。这对于不需要明确定义类即可快速创建对象的场景非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

讨论
创建一个stdClass类型的对象,其不含有任何属性和方法,就像array( )返回一个空数组一样。
你可以为其创建一个新的属性并分配给它某个值,然后检查它的值。
$guss = new stdClass;   
$guss ->location = 'Essex' ;   
print "$guss->location/n" ;   
$guss ->location = 'Orchard' ;   
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 );  

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

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

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/jiabangok/archive/2009/11/26/4879503.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值