PHP變量內(nèi)存分配問題記錄整理
更新時(shí)間:2013年11月27日 17:23:20 作者:
今天碰到一個(gè)關(guān)于php變量內(nèi)存分配的問題,下面記錄一下,感興趣的額朋友不要錯(cuò)過
今天碰到一個(gè)關(guān)于php變量內(nèi)存分配的問題,記錄一下。
如下這段代碼:
$a = array (
'str' => 1,
'child' => 2
);
$b = $a;
$b['child'] = $a;
$b['child']['str'] = 2;
echo $b['str'];
$b = null;
echo $a['str'];
會(huì)輸出什么呢,結(jié)果是11,$b=$a的時(shí)候其實(shí)并沒有新分配內(nèi)存,ab是指向的同一個(gè)區(qū)域,$b['child']=$a時(shí),$b會(huì)先copy一份原來$a的內(nèi)容,然后再修改,也就是說這時(shí)候$b和$a指向了不同的區(qū)域,再修改$a或者$b的時(shí)候都不會(huì)互相影響了。
再看這段代碼:
class A
{
public $str = '';
public $child;
}
$a = new A();
$b = $a;
$a->str = 1;
$a->child = 2;
$b->child = $a;
$b->child->str = 2;
echo $b->str;
$b = null;
echo $a->str;
又會(huì)輸出什么呢,結(jié)果是22,根據(jù)實(shí)際情況來判斷,$b->child=$a的時(shí)候,并沒有像數(shù)組那樣,重新copy一份,ab以及a->child都是指向的同一片區(qū)域,這樣改任何一個(gè),其余幾個(gè)都會(huì)被改掉。
可是PHP為啥要設(shè)計(jì)成這樣呢。
如下這段代碼:
復(fù)制代碼 代碼如下:
$a = array (
'str' => 1,
'child' => 2
);
$b = $a;
$b['child'] = $a;
$b['child']['str'] = 2;
echo $b['str'];
$b = null;
echo $a['str'];
會(huì)輸出什么呢,結(jié)果是11,$b=$a的時(shí)候其實(shí)并沒有新分配內(nèi)存,ab是指向的同一個(gè)區(qū)域,$b['child']=$a時(shí),$b會(huì)先copy一份原來$a的內(nèi)容,然后再修改,也就是說這時(shí)候$b和$a指向了不同的區(qū)域,再修改$a或者$b的時(shí)候都不會(huì)互相影響了。
再看這段代碼:
復(fù)制代碼 代碼如下:
class A
{
public $str = '';
public $child;
}
$a = new A();
$b = $a;
$a->str = 1;
$a->child = 2;
$b->child = $a;
$b->child->str = 2;
echo $b->str;
$b = null;
echo $a->str;
又會(huì)輸出什么呢,結(jié)果是22,根據(jù)實(shí)際情況來判斷,$b->child=$a的時(shí)候,并沒有像數(shù)組那樣,重新copy一份,ab以及a->child都是指向的同一片區(qū)域,這樣改任何一個(gè),其余幾個(gè)都會(huì)被改掉。
可是PHP為啥要設(shè)計(jì)成這樣呢。
您可能感興趣的文章:
- 訪問php時(shí)提示內(nèi)存位置訪問無效的解決辦法和思路分析
- 采用PHP函數(shù)memory_get_usage獲取PHP內(nèi)存清耗量的方法
- PHP中使用unset銷毀變量并內(nèi)存釋放問題
- phpExcel導(dǎo)出大量數(shù)據(jù)出現(xiàn)內(nèi)存溢出錯(cuò)誤的解決方法
- php頁面消耗內(nèi)存過大的處理辦法
- 解析PHP中的內(nèi)存管理,PHP動(dòng)態(tài)分配和釋放內(nèi)存
- 淺析php中如何在有限的內(nèi)存中讀取大文件
- php出現(xiàn)內(nèi)存位置訪問無效錯(cuò)誤問題解決方法
- PHP腳本內(nèi)存泄露導(dǎo)致Apache頻繁宕機(jī)解決方法
- php實(shí)現(xiàn)讀取內(nèi)存順序號(hào)
相關(guān)文章
php microtime獲取浮點(diǎn)的時(shí)間戳
看到別人的源碼中用microtime(true),查了下手冊,原來從PHP 5.0.0 開始,microtime增加了這個(gè)參數(shù)。2010-02-02PHP 數(shù)組操作詳解【遍歷、指針、函數(shù)等】
這篇文章主要介紹了PHP 數(shù)組操作,結(jié)合實(shí)例形式詳細(xì)分析了PHP數(shù)組遍歷、指針、數(shù)組常用函數(shù)等相關(guān)原理、使用技巧與操作注意事項(xiàng),需要的朋友可以參考下2020-05-05PHP生成各種隨機(jī)驗(yàn)證碼的方法總結(jié)【附demo源碼】
這篇文章主要介紹了PHP生成各種隨機(jī)驗(yàn)證碼的方法,結(jié)合具體實(shí)例形式總結(jié)分析了php常用的生成驗(yàn)證碼操作相關(guān)技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-06-06PHP判斷一個(gè)變量是否為整數(shù)、正整數(shù)的方法示例
這篇文章主要給大家介紹了關(guān)于PHP判斷一個(gè)變量是否為整數(shù)、正整數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用PHP具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09PHP實(shí)現(xiàn)隨機(jī)發(fā)撲克牌
這篇文章主要為大家詳細(xì)介紹了PHP實(shí)現(xiàn)隨機(jī)發(fā)撲克牌,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04PHP封裝PDO實(shí)現(xiàn)操作MySql數(shù)據(jù)庫
數(shù)據(jù)庫操作類可以封裝數(shù)據(jù)庫連接和操作,使代碼更易于維護(hù)和擴(kuò)展,這篇文章主要為大家詳細(xì)介紹了PHP如何封裝操作類PDO從而實(shí)現(xiàn)操作MySql數(shù)據(jù)庫的功能,需要的可以了解下2023-10-10phpMyAdmin 鏈接表的附加功能尚未激活問題的解決方法(已測)
今天幫客戶配置phpmyadmin,一直有“鏈接表的附加功能尚未激活”的問題,登陸phpmyadmin后,會(huì)在底部顯示“鏈接表的附加功能尚未激活。要查出原因,請點(diǎn)擊此處?!钡奶崾尽?/div> 2012-03-03PHP實(shí)現(xiàn)動(dòng)態(tài)刪除XML數(shù)據(jù)的方法示例
這篇文章主要介紹了PHP實(shí)現(xiàn)動(dòng)態(tài)刪除XML數(shù)據(jù)的方法,在前面介紹的Message_XML類基礎(chǔ)上進(jìn)行改進(jìn),增加了xml刪除功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2018-03-03最新評(píng)論