日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 函数传值_传址_函数参数,php函数的传值与传址(引用)详解

發布時間:2025/3/21 php 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 函数传值_传址_函数参数,php函数的传值与传址(引用)详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在php中我們函數傳值就比較簡單了,但可能有些朋友地天真無邪函數傳址或引用搞不明白,下面小編來給各位介紹在php中函數傳值與傳址(引用)介紹,希望對各位有所幫助。

php中引用的用法:

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

2. 函數調用時的引用參數傳遞

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

2) 后來, 函數的引用類型參數被規定為需要在函數聲明時定義, 不如: function func(&$arg);

注: 引用聲明時定義引用類型參數后, 運行時引用參數傳遞被廢棄, 需要在php.ini中增加allow_call_time_pass_reference來開啟.

3. 函數返回引用類型, 這種應用方式需要聲明函數時, 在函數名前增加&符號, 并且, 在調用時, 要用引用賦值方式, 比如:

代碼如下

復制代碼

function &func() {

return $a;

}

$a = func(); //這種調用方式得到的不是引用傳值

$a =& func(); //這樣調用才是引用傳值

簡而言之, 就是讓函數的返回一個引用類型的值, 一個更實際的例子:

代碼如下

復制代碼

$a = 1;

function &func(&$a) {

return $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

php函數傳值的幾個細節

代碼如下

復制代碼

//一、基本數據類型的傳值

/* **************************************************** */

function testvar($k){

$k = 40;

}

$c = 30;

//給一個函數參數傳一個基本數據類型(整型,布爾,字符 ...), 實際上傳的就是值 ;

testvar($c);

echo $c;//結果是:30

function testvar2(&$k){

$k = 40;

}

$e = 30;

//給一個函數參數傳一個基本數據類型(整型,布爾,字符 ...), 實際上傳的y就是地址 ;

testvar2($e);

echo $e;//結果是:40

/* **************************************************** */

//二、數組(默認情況下是復制一份數據),如要傳地址則&$arr.

$arr1 = array(-1,5,0);

function testArr($arr){

for($i=0;$i

for($j=$i+1;$j

if($arr[$i]>$arr[$j]){

$temp = $arr[$i];

$arr[$i] = $arr[$j];

$arr[$j] = $temp;

}

}

}

print_r($arr); //結果:Array ( [0] => -1 [1] => 0 [2] => 5 )

}

testArr($arr1);

print_r($arr1); //結果:Array ( [0] => -1 [1] => 5 [2] => 0 )

function testArr2(&$arr){

for($i=0;$i

for($j=$i+1;$j

if($arr[$i]>$arr[$j]){

$temp = $arr[$i];

$arr[$i] = $arr[$j];

$arr[$j] = $temp;

}

}

}

}

testArr($arr1);

print_r($arr1); //結果:Array ( [0] => -1 [1] => 0 [2] => 5 )

/* **************************************************** */

//三、對象數據類型傳值

class person{

public $name;

public $age;

}

$a = new person();

$a->name = '小明';

$a->age = '20';

//變量a在存的是對象的地址,把a賦給b這個變量,實際上就是賦了一個地址。

$b = $a;

$b->age = 30;

//echo $a->age.$b->age;//結果是:30 30

//給一個函數參數傳一個對象, 實際上傳的是這個對象的地址;

function test($k){

$k->age =40;

}

//調用

test($b);

//echo $a->age.$b->age;//結果是:40 40

php函數的傳值與傳址有什么區別呢?對于這樣的問題我喜歡通過程序演示來獲取答案。讓我們來看一個演示記錄吧!

代碼如下

復制代碼

程序輸出:

1)函數傳值前變量$i的值:100

2)傳值后函數的返回值:200

3)函數傳值后變量$i的值:100

4)函數傳址前變量$i的值:100

5)傳址后函數的返回值:200

6)函數傳址后變量$i的值:200

解釋:

1)直接輸出一個賦值$i=100的變量

2)func函數傳值返回一個算術相加的結果$=100+100

3)func函數傳值,其作用區域只限于函數內部,對外面的變量$i不會有影響

4)同上

5)func函數參數前多了個"&"符,表示傳址,和2)一樣,返回值是函數的算術運行結果。

6)func(&$i),變量指針指向$i的位置,可以理解為是對變量$i的操作,$i=$i+100;這時變量$i已經相當于重新被賦值

如果去掉上面代碼的第18行注釋,會得什么結果呢?

小結:傳址為了在執行函數的同時,同時改變函數參數值,而傳值不期望改變。

總結

以上是生活随笔為你收集整理的php 函数传值_传址_函数参数,php函数的传值与传址(引用)详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。