php傳值賦值和引用賦值的區別(php傳值和傳引用區別)

本文目錄一覽:

php中傳值與傳引用的區別?

傳值要重新構造一份原參數的拷貝

傳引用則不需要

傳值對參數的修改不會改變原參數

傳引用時可以直接修改原參數

至於什麼時候傳引用,這看你的需要。

如果你的參數對象比較大(佔用內存很多),而函數本身不需要修改原對象時,這個時候就推薦傳引用,可以省去臨時對象的構造開銷。

如果你有實際修改原參數的需要,那麼就只能傳引用了。

php語言中傳值賦值和引用賦值的區別筆記

//傳值賦值和引用賦值區別

/*傳值賦值:

a.變量表:放變量名 指向它們各自的位置(盒子)

b.位置(盒子):存放值和類型*/

$a1 = 234;

$a2 = 34556;

$a1 = $a2;

var_dump($a1,$a2);

$a2 = ‘nongjiale.fun’;

var_dump($a1,$a2);

/*引用賦值:使用取地址

a.變量名同時指向同一個位置(盒子)

b.把y1的地址賦值給y2*/

$y1 = 23;

$y2 = 433;

var_dump($y1,$y2);//輸出int 23 int 433

$y2 = $y1;

$y2 = ‘mudidi.tech’;

var_dump($y1,$y2);//輸出string ‘mudidi.tech’ string ‘mudidi.tech’

請說明php中傳值與傳引用的區別.什麼時候傳值什麼

傳值,

是把實參的值賦值給行參

那麼對行參的修改,不會影響實參的值

傳引用

真正的以地址的方式傳遞參數

傳遞以後,行參和實參都是同一個對象,只是他們名字不同而已

對行參的修改將影響實參的值

所謂值傳遞,就是說僅將對象的值傳遞給目標對象,就相當於copy;系統將為目標對象重新開闢一個完全相同的內存空間。

所謂引用,就是說將對象在內存中的地址傳遞給目標對象,就相當於使目標對象和原始對象對應同一個內存存儲空間。此時,如果對目標對象進行修改,內存中的數據也會改變。

PHP對象賦值給變量的兩種方式的區別,一般賦值和引用賦值

把變量存儲值當成文件存儲內容來理解,普通賦值就是文件複製,引用賦值就是建立快捷方式,明白了吧。

php值傳遞和引用傳遞

值傳遞是將右邊變量的數據值本身,拷貝一份,賦值給左邊變量。

例如:

可見:值傳遞之後,兩個變量互不影響,相互獨立,沒有關係了,各自有各自的存放空間,改變一個,另一個不受影響。

原理如下:

引用傳遞是將右邊變量對數據的引用關係,傳給左邊的變量

原理如下:

引用傳遞,後一個變量的值,會隨着前一個變量的值的改變而改變。

詳解PHP變量傳值賦值和引用賦值變量銷毀

本文實例為大家分享了PHP變量傳值賦值和引用賦值變量銷毀的具體代碼,供大家參考,具體內容如下

?php

$a

=

100;

$b

=

200;

var_dump($a,$b);

//int(100)

int(200)

?

php中,上面的代碼,變量是怎麼存放的呢?

上面的代碼變動下,將變量b賦值給變量a,會發生什麼?

?php

$a

=

100;

$b

=

200;

$a

=

$b;/*多了這個*/

var_dump($a,$b);

//int(200)

int(200)

?

問題來了,$a

=

$b,那麼是將變量a的指針指向了變量b指針所指向的位置?還是變量a指向的位置的值變了?

引用賦值和上面傳值賦值不同,引用賦值是兩個變量指向一個地方,一旦這樣,一改俱改。

怎麼引用賦值呢?變量名前加即可,

$a

=

$b;

這樣賦予變量a的就不僅僅是變量b的值,而是變量b的地址,變量a和變量b共同指向一個地址。

?php

$a

=

100;

$b

=

200;

$a

=

$b;

var_dump($a,$b);

//int(200)

int(200)

/*變量b引用賦值給變量a後,ab指向同一個地址,將會一改俱改,如下:*/

$a

=500;

var_dump($a,$b);//int(500)

int(500)

一改俱改

$b

=

700;

var_dump($a,$b);//int(700)

int(700)

一改俱改

?

?php

/*理解下面的話*/

$a

=

100;

//變量a賦值int

100

,100是基礎數據類型,不是變量,是存在變量指向位置的

$a

=

$b;

//變量b的值

賦值

給變量a,變量a,b各有各的指向,執行之後,各是各的。

$a

=

$b;

//變量b的值的地址

賦值給變量

a

,變量a,b共用一個地址哦!一改俱改!

?

?php

/*

php中unset()是用來銷毀變量的,但很多時候,unset()只把變量給銷毀了,

內存中存放的該變量的值仍然沒有銷毀,也就是沒能達到我們想要的釋放內存的效果。

這裡可以用

變量=null

的方法來釋放其內存

unset也會釋放內存的情況

1.

在變量值所佔空間超過255位元組長的時候,unset(變量)才會釋放內存

2.

只有當指向該值的所有變量都被銷毀後,地址才會被釋放(比如$a,$b都指向該值,僅僅unset($a);是不釋放的,$b還是正常存在的)(也要執行1的判斷)

*/

$a

=

200;

$b

=

$a;

unset($a);

var_dump($a,$b);

//NULL

int(100)

?

上面的代碼,執行到unset($a)時候,就是將變量a的指向斷開,同時將變量a扔出花名冊,從下圖可以看出,對變量b是沒有影響的。

但是,如果用$a

=

null;這種方式銷毀變量時,將會有如下影響:

?php

$a

=

100;

$b

=

$a;

$a

=

null;

var_dump($a,$b);

//NULL

NULL

?

這種方式,釋放了內存,但是共用一個地址的另一個變量也受到了影響。

看看這兩種方式在數組上的應用:

?php

$aaa

=

array(

‘a’=1,

‘b’=2

);

unset($aaa[‘a’]);

print_r($aaa);

//Array

(

[b]

=

2

)

,用unset,數組中這一項不存在了

$bbb

=

array(

‘a’=1,

‘b’=2

);

$bbb[‘a’]

=

null;

print_r($bbb);

//Array

(

[a]

=

[b]

=

2

)

,用

=

null,數組中這一項還存在,只是為空了

?

以上所述是小編給大家介紹的PHP變量傳值賦值和引用賦值變量銷毀詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

您可能感興趣的文章:PHP生成短網址的思路以及實現方法的詳解PHP錯誤提示It

is

not

safe

to

rely

on

the

system……的解決方法PHP隨機數函數rand()與mt_rand()的講解php微信掃碼支付

php公眾號支付PHP實現支持CURL字符串證書傳輸的方法PHP使用OB緩存實現靜態化功能示例PHP使用mysqli同時執行多條sql查詢語句的實例PHP中命名空間的使用例子PHP

SESSION機制的理解與實例PHP自動載入類文件函數__autoload的使用方法

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/290878.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-24 13:14
下一篇 2024-12-24 13:14

相關推薦

  • Python中new和init的區別

    new和init都是Python中常用的魔法方法,它們分別負責對象的創建和初始化,本文將從多個角度詳細闡述它們的區別。 一、創建對象 new方法是用來創建一個對象的,它是一個類級別…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Sublime Test與Python的區別

    Sublime Text是一款流行的文本編輯器,而Python是一種廣泛使用的編程語言。雖然Sublime Text可以用於編寫Python代碼,但它們之間有很多不同之處。接下來從…

    編程 2025-04-29
  • Shell腳本與Python腳本的區別

    本文將從多個方面對Shell腳本與Python腳本的區別做詳細的闡述。 一、語法差異 Shell腳本和Python腳本的語法存在明顯差異。 Shell腳本是一種基於字符命令行的語言…

    編程 2025-04-29
  • Python中while語句和for語句的區別

    while語句和for語句是Python中兩種常見的循環語句,它們都可以用於重複執行一段代碼。然而,它們的語法和適用場景有所不同。本文將從多個方面詳細闡述Python中while語…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • Web程序和桌面程序的區別

    Web程序和桌面程序都是進行軟件開發的方式,但是它們之間存在很大的區別。本文將從多角度進行闡述。 一、運行方式 Web程序運行於互聯網上,用戶可以通過使用瀏覽器來訪問它。而桌面程序…

    編程 2025-04-29
  • Python文件路徑賦值

    Python中文件操作是非常基本的操作,而文件路徑是文件操作的前提。本文將從多個方面闡述如何在Python中賦值文件路徑。 一、絕對路徑和相對路徑 在Python中,路徑可以分為絕…

    編程 2025-04-28
  • TensorFlow和Python的區別

    TensorFlow和Python是現如今最受歡迎的機器學習平台和編程語言。雖然兩者都處於機器學習領域的主流陣營,但它們有很多區別。本文將從多個方面對TensorFlow和Pyth…

    編程 2025-04-28
  • 麥語言與Python的區別

    麥語言和Python都是非常受歡迎的編程語言。它們各自有自己的優缺點和適合的應用場景。本文將從語言特性、語法、生態系統等多個方面,對麥語言和Python進行詳細比較和闡述。 一、語…

    編程 2025-04-28

發表回復

登錄後才能評論