&引用符的应用

php的引用(就是在变量或者函数、对象等前面加上&符号) 。

最重要就是 删除引用的变量,只是引用的变量访问不了,但是内容并没有销毁。

在PHP中引用的意思是:不同的名字访问同一个变量内容。

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

比如说你想把数组内的数字成2,也可以使用引用的特性。

<?php
$arr = [1,2,3,4];
foreach ($arr as &$value){
    $value = $value*2;
}
var_dump($arr);

下面有一道面试题,问输出结果。

<?php
$data = ['a','b','c'];

foreach ($data as $key=>$val){
    $val = &$data[$key];
}
var_dump($data);

这是很有意思的一道题,结果是[‘b’,’c’,’c’],循环中进行了隐型复制,不懂得小伙伴继续往下看。

<?php
$data = ['a','b','c'];
foreach ($data as $key=>$val){
    xdebug_debug_zval('val');
    xdebug_debug_zval('data');
    $val = &$data[$key];
    xdebug_debug_zval('val');
    xdebug_debug_zval('data');
    echo '__________________<br/>';
}
var_dump($data);

下面是结果,注意观察 is_ref 的变化
val:
(refcount=2, is_ref=0),string 'a' (length=1)
data:
(refcount=2, is_ref=0),
array (size=3)
  0 => (refcount=2, is_ref=0),string 'a' (length=1)
  1 => (refcount=1, is_ref=0),string 'b' (length=1)
  2 => (refcount=1, is_ref=0),string 'c' (length=1)
val:
(refcount=2, is_ref=1),string 'a' (length=1)
data:
(refcount=1, is_ref=0),
array (size=3)
  0 => (refcount=2, is_ref=1),string 'a' (length=1)
  1 => (refcount=2, is_ref=0),string 'b' (length=1)
  2 => (refcount=2, is_ref=0),string 'c' (length=1)
__________________
val:
(refcount=2, is_ref=1),string 'b' (length=1)
data:
(refcount=1, is_ref=0),
array (size=3)
  0 => (refcount=2, is_ref=1),string 'b' (length=1)
  1 => (refcount=2, is_ref=0),string 'b' (length=1)
  2 => (refcount=2, is_ref=0),string 'c' (length=1)
val:
(refcount=2, is_ref=1),string 'b' (length=1)
data:
(refcount=1, is_ref=0),
array (size=3)
  0 => (refcount=1, is_ref=0),string 'b' (length=1)
  1 => (refcount=2, is_ref=1),string 'b' (length=1)
  2 => (refcount=2, is_ref=0),string 'c' (length=1)
__________________
val:
(refcount=2, is_ref=1),string 'c' (length=1)
data:
(refcount=1, is_ref=0),
array (size=3)
  0 => (refcount=1, is_ref=0),string 'b' (length=1)
  1 => (refcount=2, is_ref=1),string 'c' (length=1)
  2 => (refcount=2, is_ref=0),string 'c' (length=1)
val:
(refcount=2, is_ref=1),string 'c' (length=1)
data:
(refcount=1, is_ref=0),
array (size=3)
  0 => (refcount=1, is_ref=0),string 'b' (length=1)
  1 => (refcount=1, is_ref=0),string 'c' (length=1)
  2 => (refcount=2, is_ref=1),string 'c' (length=1)
__________________
D:\project\test\closure.php:13:
array (size=3)
  0 => string 'b' (length=1)
  1 => string 'c' (length=1)
  2 => string 'c' (length=1)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇