PHP中stdClass的意義

2021-08-07 17:04:54 字數 1791 閱讀 5510

在wordpress中很多地方使用stdclass來定義乙個物件(而通常是用陣列的方式),然後使用get_object_vars來把定義的物件『轉換』成陣列。

如下**所示:

$tanteng = new stdclass();

$tanteng->name = 'tanteng';

$tanteng->email = '***@qq.com';

$info = get_object_vars($tanteng);

print_r($info);exit;

輸出:array ( [name] => tanteng [email] => ***@qq.com )

get_object_vars的作用是返回由物件屬性組成的關聯陣列。它的效果跟這樣定義陣列其實是一樣的:

$tanteng = array();

$tanteng['name'] = 'tanteng';

$tanteng['email'] = '***@qq.com';

可以這樣理解:stdclass是乙個內建類,它沒有成員變數,也沒有成員方法的乙個類。new乙個stdclass就是例項化了乙個『空』物件,它本身沒什麼意義,但是用stdclass定義有什麼好處呢?

如下**:

$user

=new stdclass();

$user

->name =

'gouki';

$user

->hehe =

'hehe';

$myuser

=$user;

$myuser

->name =

'flypig';

print_r($user);

print_r($myuser);

print_r($user);

這裡my

user

被賦值 user,但其實並沒有新開闢一塊記憶體儲存變數,my

user

還是指的

stdc

lass

這個物件

,通過 myuser改變屬性頁就改變了$user的屬性,並不是新建乙個副本,如果程式中有許多這樣的操作,使用stdclass的方式可以節省記憶體開銷。

執行結果:

stdclass object

( [name] => flypig

[hehe] => hehe

)stdclass object

( [name] => flypig

[hehe] => hehe

)stdclass object

( [name] => flypig

[hehe] => hehe

)

從結果可以看出,改變my

user

的屬性確

實改變了

user宣告的stdclass屬性。而如果us

er是一

個陣列,

賦值給 myuser,那就拷貝了乙個副本給$myuser,這樣增大系統開銷。

當然,你也可以反過來,把乙個陣列轉換為物件:

$hehe['he1'] = 'he1';

$hehe['he2'] = 'he2';

$hh = (object) $hehe;

print_r($hh);

列印結果:

stdclass object ( [he1] => he1 [he2] => he2 )

php中stdClass的用法分析

這篇文章主要介紹了php中stdclass的用法,例項分析了stdclass的功能及使用技巧,具有一定參考借鑑價值,需要的朋友可以參考下 stdclass在php中是預定義的幾個類之一,是zent保留的乙個類。實際上它是php提供的乙個基類,就是乙個空白的類,裡面什麼都沒有,我們可以例項化它,然後定...

php中stdClass的用法分析

stdclass在php中是預定義的幾個類之一,是zent保留的乙個類。實際上它是php提供的乙個基類,就是乙個空白的類,裡面什麼都沒有,我們可以例項化它,然後定義一系列的變數,通過它來進行變數的傳遞 很多php程式設計師用它來傳遞一系列變數的值,而同時又懶得去建立乙個自己的類 但是,由於例項化後不...

php中 SERVER變數的意義及用法說明

server php self 函式用法 當前正在執行指令碼的檔名,與 document root相關。server argv 函式用法 傳遞給該指令碼的引數。server argc 函式用法 包含傳遞給程式的命令列引數的個數 如果執行在命令列模式 server gateway inte ce 函式...