當前位置:首頁 » 編程語言 » php傳值和引用的區別

php傳值和引用的區別

發布時間: 2022-09-22 05:33:18

php函數中數組作為參數時是值傳遞還是引用傳遞

默認情況下,數組是值傳遞,只有對象是引用傳遞。

❷ PHP對象到底是值傳遞還是引用傳遞

  • 對象在函數中是引用傳遞

  • 即使賦值給其它變數,也是引用

  • 但是改變了$a的類型,准確的說是zval.value指針都變化了,所以此時產生了分裂。

  • 所以:

    盡量避免函數內操作外部對象,否則有可能造成致命性的邏輯錯誤,特別是改變對象數據的時候。
    或者在做對象數據傳遞的時候要注意數據的嚴謹性。

❸ PHP練習題

一.
1.(1)php.ini
(2)/etc/httpd/conf/ 下的這三個文件 httpd.conf access.conf srm.conf
2.(1)gettype-獲取變數的類型由於包含字元串的比較運行較慢,現在使用 is_int()判斷變數是否是整型若是則返回true、is_array()判斷是否是雙精度型還有is_array(),is_string()等函數是判斷數

據類型的
(2)settype-轉換
3.(1)is_null()(2)isset()
4.$
5.trim(),rtrim()
二.
1.A
2.B
3.C
4.D
5.D
6.A
7.C
8.A
9.C
10.B
11.C
12.B
13.A
14.A
15.C
16.A
17.D
18.C
19.C
20.A
27.C
28.C
29.B
30.A

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

傳值要重新構造一份原參數的拷貝
傳引用則不需要

傳值對參數的修改不會改變原參數
傳引用時可以直接修改原參數

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

❺ php 使用use 和直接傳參的區別

實際應用 1 : 在創建閉包時, 生成所use變數的快照, 下文再次調用閉包函數時, 快照變數不改變
$a = 5;

$b = function ($x) use ($a) {
$a += $x; echo $a;
};

$a = 10; // 這個變數被再次賦值, 但是在use語句中的'快照'是不會改變的

$b(100); // 輸出 : 105

實際應用 2 : 使用引用傳值, 生成所use變數的指針, 下文再次調用閉包函數時, 快照變數會改變(其實這樣做與直接傳參已經沒有區別, 所以這么做意義不大, 而且代碼可讀性降低)

$a = 5;

$b = function ($x) use (&$a) {
$a += $x; echo $a;
};

$a = 10; // 變數重新賦值, 上文中閉包所引用的變數值也被改變

$b(100); // 輸出 : 110

❻ PHP中$a++和++$a有什麼區別

運算符優先順序不一樣

比如 $a = 1;$b=1;

//那麼
echo $a++; // 這句輸出a 為 1;
echo ++$b; // 這句輸出b 為 2;

當++放在前面的時候 運算符優先計算 而放後面就不優先
再舉個例子
$x=1;
$y = $x++;
那麼 這個 $y 的值就是一 但是如果$x++ 寫成++$x 那麼 $y 就是2
就是說 一個是先賦值再自加1 令種是 先自加一 再賦值給$y

❼ PHP中按值傳遞和引用傳遞的區別

(1)按值傳遞:函數范圍內對值的任何改變在函數外部都會被忽略

(2)按引用傳遞:函數范圍內對值的任何改變在函數外部也能反映出這些修改

(3)優缺點:

A:按值傳遞時,php必須復制值。特別是對於大型的字元串和對象來說,這將會是一個代價很大的操作。

B.按引用傳遞則不需要復制值,對於性能提高很有好處。

<?php
header('content-type:text/html;charset=utf-8');
//探討一下array,null,對象,資源的默認傳遞方式
//結論(1)array默認是值傳遞,通過加&可以引用傳遞
//(2)null默認是值傳遞,通過加&可以引用傳遞
//(3)資源是值傳遞.通過加&可以引用傳遞
//(4)對象默認也是值傳遞,但是對象值傳遞是對象標識符
$hero=array('no1'=>'蝙蝠俠','no2'=>'超人');
$hero2=&$hero;
$hero2['no1']='蜘蛛俠';
echo'<pre>';
var_mp($hero);

var_mp($hero2);
$a=null;
$b=&$a;
$b='abc';
var_mp($a,$b);
?>

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

本文實例為大家分享了PHP變數傳值賦值和引用賦值變數銷毀的具體代碼,供大家參考,具體內容如下
<?php
$a
=
100;
$b
=
200;
var_mp($a,$b);
//int(100)
int(200)
?>
php中,上面的代碼,變數是怎麼存放的呢?
上面的代碼變動下,將變數b賦值給變數a,會發生什麼?
<?php
$a
=
100;
$b
=
200;
$a
=
$b;/*多了這個*/
var_mp($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_mp($a,$b);
//int(200)
int(200)
/*變數b引用賦值給變數a後,ab指向同一個地址,將會一改俱改,如下:*/
$a
=500;
var_mp($a,$b);//int(500)
int(500)
一改俱改
$b
=
700;
var_mp($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_mp($a,$b);
//NULL
int(100)
?>
上面的代碼,執行到unset($a)時候,就是將變數a的指向斷開,同時將變數a扔出花名冊,從下圖可以看出,對變數b是沒有影響的。
但是,如果用$a
=
null;這種方式銷毀變數時,將會有如下影響:
<?php
$a
=
100;
$b
=
&$a;
$a
=
null;
var_mp($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的使用方法

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

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

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

傳值,
是把實參的值賦值給行參
那麼對行參的修改,不會影響實參的值
傳引用
真正的以地址的方式傳遞參數
傳遞以後,行參和實參都是同一個對象,只是他們名字不同而已
對行參的修改將影響實參的值
所謂值傳遞,就是說僅將對象的值傳遞給目標對象,就相當於;系統將為目標對象重新開辟一個完全相同的內存空間。
所謂引用,就是說將對象在內存中的地址傳遞給目標對象,就相當於使目標對象和原始對象對應同一個內存存儲空間。此時,如果對目標對象進行修改,內存中的數據也會改變。

熱點內容
如何通過網吧電腦進入網吧伺服器 發布:2025-01-10 22:22:30 瀏覽:704
資料庫緩存是什麼 發布:2025-01-10 22:21:05 瀏覽:384
dns配置出現錯誤該怎麼辦 發布:2025-01-10 22:13:00 瀏覽:437
雲頂演算法 發布:2025-01-10 22:10:07 瀏覽:988
收件伺服器有什麼作用 發布:2025-01-10 21:50:01 瀏覽:389
安卓70緩存 發布:2025-01-10 21:49:03 瀏覽:682
圖像檢索演算法 發布:2025-01-10 21:43:58 瀏覽:557
plsqlforupdate 發布:2025-01-10 21:43:50 瀏覽:915
如何設置健康碼快捷方式vivo安卓 發布:2025-01-10 21:39:52 瀏覽:502
安卓不兼容怎麼解決 發布:2025-01-10 21:37:02 瀏覽:31