溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

php數(shù)組是引用類(lèi)型嗎

發(fā)布時(shí)間:2022-09-21 09:33:37 來(lái)源:億速云 閱讀:147 作者:iii 欄目:編程語(yǔ)言

本文小編為大家詳細(xì)介紹“php數(shù)組是引用類(lèi)型嗎”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“php數(shù)組是引用類(lèi)型嗎”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

php數(shù)組不是引用類(lèi)型,而是值類(lèi)型;數(shù)組賦值時(shí)會(huì)創(chuàng)建不同的變量(副本),因此修改另一個(gè)變量,并不會(huì)影響到數(shù)組本身。且PHP數(shù)組傳遞是值傳遞;在調(diào)用函數(shù)時(shí)通過(guò)將PHP數(shù)組作為實(shí)參賦給形參,在函數(shù)中修改,并不會(huì)影響到數(shù)組本身,說(shuō)明此過(guò)程中的傳遞是值傳遞,數(shù)組變量并非指向此數(shù)組本身的引用。

本教程操作環(huán)境:windows7系統(tǒng)、PHP8.1版、DELL G3電腦

在PHP中,大部分變量類(lèi)型,如字符串,整型,浮點(diǎn),數(shù)組等都是值類(lèi)型的,而類(lèi)和對(duì)象是引用類(lèi)型,在使用的時(shí)候,需要注意這一點(diǎn)。

PHP的變量在內(nèi)存中是這樣存儲(chǔ)的,變量保存的并不直接是值的內(nèi)容,而是地址。例如:

$a = 1;

我們看起來(lái),似乎變量$a直接存儲(chǔ)了 1 這個(gè)值。而實(shí)際情況是,PHP解釋器創(chuàng)建了變量$a,將值:1 存入內(nèi)存中的某個(gè)地方,再將值的地址存到變量$a中。

需要取值時(shí),先找到變量$a中的地址,再根據(jù)地址找到變量的值。

往下看:

echo $a;

會(huì)輸出1,PHP解釋器會(huì)這樣完成這一樣代碼:找到$a中存儲(chǔ)的地址,根據(jù)地址找到存在內(nèi)存某個(gè)地方的值,輸出到屏幕。

看似一行簡(jiǎn)單的代碼,流程卻是這樣的。

再往下看:

$a = 1;
$b = &$a;

這里的變量$b 做了一個(gè)有趣的操作,&符號(hào)取出了$a變量中存儲(chǔ)的地址,并存儲(chǔ)到$b變量。

那么,如果使用下面代碼:

echo $b;

結(jié)果也將是輸出1,PHP解釋器先取出$b中存儲(chǔ)的地址,再根據(jù)地址找到值。如果我們做下面的操作:

$a = 2;
echo $b; //輸出2

會(huì)發(fā)現(xiàn)改變$a的值,$b也跟著變了。其實(shí)反過(guò)來(lái),改變$b的值,$a的值也會(huì)跟這變。

到這一步,我們可以確定,變量$a和$b存儲(chǔ)了相同的地址,指向的值是一樣的。

那么,我們可以得出結(jié)論:它們表示的是同一個(gè)變量。

進(jìn)一步總結(jié),可以得出:如果兩個(gè)變量存儲(chǔ)了相同的地址,它們就是同一個(gè)變量。

了解了著一些內(nèi)容,我們開(kāi)始介紹值類(lèi)型和引用類(lèi)型。

我們先看下面的代碼:

$a = 1;
$b = $a;
$a = 2;
echo $b; //輸出 1

將$a的值賦給$b,改變$a的值后,$b的值依然不變,也就是說(shuō)$a和$b是兩個(gè)不同的變量,指向不同的地址。這種賦值時(shí)會(huì)創(chuàng)建不同的變量的形式我們稱(chēng)之為值類(lèi)型。

再看:

class User{
 public $name = ‘Tome‘;
}
$a = new User;
$b = $a;
$a->name = ‘Jim‘;
echo $b->name; //輸出 Jim

同樣將$a的值賦給$b,改變$a后,$b也跟著變了,也就是說(shuō)$a和$b是同一個(gè)變量,指向相同的地址。這種賦值時(shí)不會(huì)創(chuàng)建新的變量的形式我們稱(chēng)之為引用類(lèi)型。

php數(shù)組 值類(lèi)型

PHP中數(shù)組傳遞是值傳遞而非引用傳遞。

在調(diào)用函數(shù)時(shí)通過(guò)將PHP數(shù)組作為實(shí)參賦給形參,在函數(shù)中修改,并不會(huì)影響到數(shù)組本身。

說(shuō)明此過(guò)程中的傳遞為值傳遞,數(shù)組變量并非是指向此數(shù)組本身的引用,PHP數(shù)組本身以值的形式存在,同時(shí)形參是對(duì)數(shù)組的拷貝。

這點(diǎn)與其他一些語(yǔ)言不同(如c、Js等)很不相同,值得注意!

示例如下:

$arr = array(
    'name' => 'corn',
    'age' => '24',
);
test_arr($arr);
function test_arr($arr){
    $arr['name'] = 'qqyumidi';
}
print_r($arr); //result: Array ( [name] => corn [age] => 24 )

js代碼如下:

var arr = new Array('corn', '24');
test_arr(arr);
function test_arr(arr){
    arr[0] = 'qqyumidi';
}
console.log(arr);  //result:["qqyumidi", "24"]

如果需要對(duì)PHP中的值傳遞使用引用傳遞效果,可以在形參前面加上取地址符&。

$aa = 100;
test_vars($aa);
function test_vars(&$aa){
    $aa = 200;
}
print_r($aa);   //result: 200

讀到這里,這篇“php數(shù)組是引用類(lèi)型嗎”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI