如果所有的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.csdn.net/crazyjeff_liu/article/details/4046070