在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 函式...