PHP函式引用返回的例項詳解

2022-10-06 01:18:09 字數 2239 閱讀 4060

引用返回

手冊裡是這麼寫的:引用返回用在當想用函式找到引用應該被繫結在哪乙個變數上面時。不要用返回引用來增加效能,引擎足夠聰明來自己進行優化。僅在有合理的技術原因時才返回引用!要返回引用

當你想將函式的返回引用繫結到某個變數時,php允許你這麼做:

function &returns_reference()

$newref = &returns_reference();//引用返回,相當於 $newref = &$someref;

echo $newref; //1

$notref = returns_reference(); //值傳遞的是副本

$newref = 100;

echo $notref; //2

$newref = 程式設計客棧100;

echo returns_reference(); //101

可見,想讓函式返回引用,必須在函式申明和賦值時都帶上&操作符.

對於類中方法也是如此:

class foo }

$obj = new foo;

$myvalue = &$obj->getvalue(); // $myvalue is a reference to $obj->value, which is 42.

$obj->value = 2;

echo $myvalue;

一些簡單的例子

看下面的簡單例子,嘗試去理解引用返回.

<?php function &test()

$a = test(); //這條語句會輸出 $b 的值為 1

$a = 5;

$a = test(); //這條語句會輸出 $b 的值為2

$a = &test(); //這條語句會輸出 $b 的值為3

$a = 5;

$a = test(); //這條語句會輸出 $b的值 為6

?>

//程式執行結果:12

36儘管函式宣告方式是function &test()這樣,但我們通過這種方式$a = test()的函式呼叫得到的其實不是函式的引用返回,這跟普通的函式呼叫沒有區別。php 規定通過 $a = &test() 這種方式得到的才是函式的引用返回。

用上面的例子來解釋就是,$a = test()這種方式呼叫函式,只是將函式的值賦給 $a 而已,而$a做任何改變都不會影響到函式中的$b。

而通過$a = &test()方式呼叫函式呢,它的作用是將return $b中的 $b 變數的記憶體位址與 $a 變數的記憶體位址指程式設計客棧向了同乙個地方。即產生了相當於這樣的效果 ($a=&$b), 所以改變 $a 的值也同時改變了 $b 的值。

所以在執行了

$a = &test();

$a = 5;

以後,$b的值變為了5。

再來個程式例子加深理解:

<?php /*

** 值傳遞和引用傳遞,值傳遞傳遞的是值的乙個複本,引用傳遞傳遞的是值指向的記憶體位址

*/// 函式的引用,定義時也要加上 &

function &func($a,$b)

$a = $b = 10;

// php裡這樣寫函式的引用呼叫,和呼叫普通函式沒有區別(只是將函式的返回值複製給$c這個變數,$c做任何改變不會影響上面函式中的$result)

// 要記住:php裡的函式引用定義及呼叫都要在函式名前加上 &

$c = func($a,$b);

// 第一次執行func(),其靜態變數$resul程式設計客棧t的值變為 20(10+10)

// 改變$c的值,不會對下面一行語句產生影響

$c = 666;

// 第二次執行func(),其靜態變數$result的值變為 40(20+10+10)

$c = func($a,$b);

echo '';

// 這樣才是php中引用函式的呼叫方式

$d = &func($a,$b);

// 第三次執行func(),其靜態變數$result的值變為 40(40+10+10)

$d = 888;

// 第四次執行func(),其靜態變數$result的值變程式設計客棧為 908(888+10+10)

$d = func($a,$b);

?>

總結關於php函式引用返回的內容到這就基本結束了,希望對大家學習或使用php函式能有所幫助,如果有疑問大家可以留言交流。謝謝大家對我們的支援。

本文標題: php函式引用返回的例項詳解

本文位址: /wangluo/php/163233.html

php引用返回與取消引用的詳解

一 引用返回 引用返回用在當想用函式找到引用應該被繫結在哪乙個變數上面時。不要用返回引用來增加效能,引擎足夠聰明來自己進行優化。僅在有合理的技術原因時才返回引用!要返回引用,使用此語法 複製 如下 phpclass foo obj new foo myvalue obj getvalue myval...

PHP函式處理函式例項詳解

1.call user func和call user func array 以上兩個函式以不同的引數形式呼叫 函式。見如下示例 class anothertestclass public function dosomething public function dosomethingwithargs...

PHP函式處理函式例項詳解

1.call user func和call user func array 以上兩個函式以不同的引數形式呼叫 函式。見如下示例 class anothertestclass public function dosomething public function dosomethingwithargs...