php中的引用傳值分析

2021-08-25 19:01:59 字數 1377 閱讀 8243

首先說變數的命名空間, 命名空間有全域性命名空間, 區域性命名空間(函式內部/方法內部), 所謂命名空間, 就是存放名字的地方, 就是乙個符號表, 你可以想象, 有很多陣列, 專門用來存放自己作用域中的名字.

每個命名空間是相互隔離的, 它們各自維護乙個符號表用來儲存自己作用域中的名稱(變數名)

變數是由名字和值組成的. 上面的命名空間中儲存了變數的名字, 變數的值有兩種型別, 一種是直接的值, 另外一種是對其他變數的引用.

按照樓主的意思, 應該是明白引用的含義的, 不再贅述.

php中引用的用法:

1. 變數的引用賦值: $a = &$b

2. 函式呼叫時的引用引數傳遞

1) 早期php是在呼叫時通過&符號傳遞引用型別的變數, 比如: func(&$arg);

2) 後來, 函式的引用型別引數被規定為需要在函式宣告時定義, 不如: function func(&$arg);

注: 引用宣告時定義引用型別引數後, 執行時引用引數傳遞被廢棄, 需要在php.ini中增加allow_call_time_pass_reference來開啟.

3. 函式返回引用型別, 這種應用方式需要宣告函式時, 在函式名前增加&符號, 並且, 在呼叫時, 要用引用賦值方式, 比如:

function &func() $a = func(); //這種呼叫方式得到的不是引用傳值 $a =& func(); //這樣呼叫才是引用傳值

簡而言之, 就是讓函式的返回乙個引用型別的值, 乙個更實際的例子:

$a = 1; function &func(&$a) $b = func($a); $c =& func($a); $b = 2; echo "a: $a, b: $b, c: $c.

/n"; //輸出a: 1, b: 2, c: 1. //可見對$b的修改不會影響$a $c = 3; echo "a: $a, b: $b, c: $c.

/n"; //輸出a: 3, b: 2, c: 3. //可見對$c的修改會影響$a

4. global和static兩個關鍵字

1) global用來宣告函式內部要使用乙個全域性變數, 其實這裡隱式的建立了乙個引用, 比如, global $a;就是在本地命名空間中建立乙個名字a, 讓它指向全域性空間中$a變數的值.

2) static關鍵字也是隱式建立了乙個引用, 這裡談的static是指在函式內部宣告靜態變數的用法, 比如

function func() while($a ++ < 10) func(); //輸出結果: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,

這種用法會在一次請求(就是php一次完整的解釋執行)過程中, 該變數只會被初始化一次, 每次函式呼叫結束後, 函式內的靜態變數不會被銷毀(而其他的區域性變數會被銷毀), 下一次函式呼叫時, 又重複利用上一次處理後的結果.

PHP的傳值與引用,php傳值和傳引用區別

php傳值 在函式範圍內,改變變數值得大小,都不不會影響到函式外邊的變數值。testa 1 定義變數a testb 2 定義變數b testb testa 變數a賦值給變數b echo testb 顯示為1 傳引用 類似於c語言的指標了,感覺差不多。打個比方,我有一橦房子,我給你一把鑰匙,我們二個都...

php傳值給mysql php中的引用傳值

一 簡單資料型別的的賦值為值傳遞,函式返回值賦值也是值傳遞。且php中引用採用的是 寫時拷貝 的原理,就是除非發生寫操作,指向同乙個位址的變數或者物件是不會被拷貝的。通俗的講 1 如果有下面的 a abc b a 其實此時 a與 b都是指向同一記憶體位址 而並不是 a與 b占用不同的記憶體 如果在上...

php引用傳值

from php的引用 就是在變數或者函式 物件等前面加上 符號 在php 中引用的意思是 不同的名字訪問同乙個變數內容.與 語言中的指標是有差別的 語言中的指標裡面儲存的是變數的內容在記憶體中存放的位址 變數的引用 php 的引用允許你用兩個變數來指向同乙個內容 a abc b a echo a ...