Heim  >  Artikel  >  Backend-Entwicklung  >  php中的&引用

php中的&引用

WBOY
WBOYOriginal
2016-08-18 09:16:06896Durchsuche

在一些框架上有时候会在函数上看到有&$arr这种类型的变量,上网搜索了只知道这是一个引用,我想知道在开发的时候在什么情况下我们需要使用这个,而且使用这个有什么有缺点

回复内容:

在一些框架上有时候会在函数上看到有&$arr这种类型的变量,上网搜索了只知道这是一个引用,我想知道在开发的时候在什么情况下我们需要使用这个,而且使用这个有什么有缺点

需要改变原始值的时候,比如我有个函数需要输出好几个值,

题主应该知道php只能return出一个值,当然你可以使用数组包装

<code><?php function test(&$a,&$b){
    $a = 1;
    $b = 1;
}

test($a,$b);
echo $a,"@",$b;</code></code>

可以看到输出

<code>1@1</code>

还有一种情况是大数组的时候可以省去一次内存拷贝,节约内存开销

<code class="php">$a = "china";
$b = &$a;</code>

这样php只需要存一份数据就可以了. 所以在编程的时候大变量一般要传引用,节省内存资源. 在PHP函数参数调用中,对象默认是传引用的.

你想问的是

<code>function (&$arr) {}
</code>

这种用法么?

这个玩意儿是用来修改$arr本身这个变量的。因为函数是一个密闭的空间,如果你在函数里变更了$arr,但是在外面的变量并不会改变。如果你不想使用return来返回更改后的变量你就可以使用这个。

比如说
bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
这个函数,你可以看到,返回值是bool类型的,但是他也可以返回修改后的数组。
这就是利用&这个引用符号来做到的。

因为数组默认传值和对象完全不一样。传值会复制一份,而且数组不像整数浮点这种东西,它内容多,复制带来的开销很大,所以一般让它强制传值。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn