搜尋
首頁php教程php手册PHP变量引用(&)、函数引用和对象引用

PHP变量引用(&)、函数引用和对象引用

Jun 13, 2016 am 09:15 AM
aampnbspphp記憶體函數變數地址物件引用導向的指針

PHP变量引用(&)、函数引用和对象引用

 1.变量的引用

PHP 的引用 两个变量的指针指向同一内存地址

$a="ABC";
$b =&$a;
echo $a;//这里输出:ABC
echo $b;//这里输出:ABC
$b="EFG";
echo $a;//这里$a的值变为EFG 所以输出EFG
echo $b;//这里输出EFG

2.函数的引用传递(传址调用)

function test(&$a)
{
$a=$a+100;
}
$b=1;
echo $b;//输出1
test($b);   //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了
echo "<br>";
echo $b;//输出101
?>

 

3.函数的引用返回

function &test()
{
static $b=0;//申明一个静态变量
$b=$b+1;
echo $b;
return $b;
}

$a=test();//这条语句会输出 $b的值 为1
$a=5;
$a=test();//这条语句会输出 $b的值 为2

$a=&test();//这条语句会输出 $b的值 为3
$a=5;
$a=test();//这条语句会输出 $b的值 为6

下面解释下:
通过这种方式$a=test();得到的其实不是函数的引用返回,这跟普通的函数调用没有区别 至于原因: 这是php的规定
通过$a=&test()方式调用函数呢, 他的作用是 将return $b中的 $b变量的内存地址与$a变量的内存地址 指向了同一个地方
即产生了相当于这样的效果($a=&$b;) 所以改变$a的值 也同时改变了$b的值 所以在执行了

4.对象的引用(PHP5)

class foo {
  public $bar = 1;
}

$a = new foo;   //$a其实也是一个引用
$b = $a;        //拷贝引用 ($a)=($b)={id1}

$a->bar = 2;
echo "b->bar = $b->bar\n";

$b->bar = 3;
echo "a->bar = $a->bar\n";
//修改了b,但实际上是修改了a和b所引用的同一个对象
//并不会引发 Copy On Write 创建一个新对象b

$a = new foo;   //$a被修改为一个新的引用,$b没有改变
                //($a)={id2} ($b)={id1}
$a->bar = 4;
echo "b->bar = $b->bar\n";

$b = &$a;       //显式地使用引用,b成为“对象的引用”的引用
$a = new foo;   //($a)={id3} ($b)=&($a)=&{id3}
$a->bar = 5;
echo "b->bar = $b->bar\n"
//==output====
b->bar = 2
a->bar = 3
b->bar = 3
b->bar = 5
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能