Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php5中是否需要通过引用传递变量?_Php_Pass By Reference - Fatal编程技术网

php5中是否需要通过引用传递变量?

php5中是否需要通过引用传递变量?,php,pass-by-reference,Php,Pass By Reference,PHP5使用“写时复制”并通过引用传递,导致性能损失大于收益,为什么我要使用通过引用传递?除了回调函数会返回多个值或类,这些值或类的属性在以后不调用set函数的情况下是可更改的(我知道这是一种不好的做法),我还没有找到它的用途吗?当您要修改结果时,您使用pass by reference,这就是它的全部功能 还要记住,在PHP中,对象总是通过引用传递 就我个人而言,我发现PHP隐式复制值的系统(我想是为了防止意外修改)既麻烦又不直观,但我还是从强类型语言开始,这可能解释了这一点。但我发现有趣的是

PHP5使用“写时复制”并通过引用传递,导致性能损失大于收益,为什么我要使用通过引用传递?除了回调函数会返回多个值或类,这些值或类的属性在以后不调用set函数的情况下是可更改的(我知道这是一种不好的做法),我还没有找到它的用途吗?

当您要修改结果时,您使用pass by reference,这就是它的全部功能

还要记住,在PHP中,对象总是通过引用传递


就我个人而言,我发现PHP隐式复制值的系统(我想是为了防止意外修改)既麻烦又不直观,但我还是从强类型语言开始,这可能解释了这一点。但我发现有趣的是,对象与PHP的正常操作不同,我认为这证明了PHP的隐式复制机制确实不是一个好的系统。

当您想要修改结果时,使用pass-by-reference,这就是它的全部内容

还要记住,在PHP中,对象总是通过引用传递


就我个人而言,我觉得PHP隐式复制值的系统(我想是为了防止意外修改)既麻烦又不直观,但我又开始使用强类型语言,这可能解释了这一点。但我发现有趣的是,对象与PHP的正常操作不同,我认为这是PHP的证据。”的隐式复制机制确实不是一个好系统。

一个填充数组的递归函数?记得曾经写过这样的东西吗


拥有数百份部分填充数组的副本,并在每一次复制、拼接和连接部分是没有意义的。

一个填充数组的递归函数?记得曾经写过这样的东西吗


拥有数百份部分填充数组的副本,并在每次旋转时复制、拼接和连接部分是没有意义的。

即使在传递对象时也会有差异

试试这个例子:

class Penguin { }

$a = new Penguin();

function one($a)
{
  $a = null;
}

function two(&$a)
{
  $a = null;
}

var_dump($a);
one($a);
var_dump($a);
two($a);
var_dump($a);
结果将是:

object(Penguin)#1 (0) {}
object(Penguin)#1 (0) {}
NULL

当您通过引用传递包含对对象引用的变量时,您可以修改对对象的引用。

即使传递对象时也存在差异

试试这个例子:

class Penguin { }

$a = new Penguin();

function one($a)
{
  $a = null;
}

function two(&$a)
{
  $a = null;
}

var_dump($a);
one($a);
var_dump($a);
two($a);
var_dump($a);
结果将是:

object(Penguin)#1 (0) {}
object(Penguin)#1 (0) {}
NULL

当您通过引用传递包含对对象引用的变量时,您可以修改对对象的引用。

Java的行为与PHP相同(通过引用传递对象,通过值传递[“复制”]的原语),我相信C++也是如此。您指的是哪种强类型语言?Java不通过引用传递对象;它复制对象引用的值;看,很公平。基于laurentb下面的示例,您似乎可以对PHP说同样的话,这只是加强了我的观点:PHP和Java中传递参数的方式几乎无法区分。我还在等待一个“强类型语言”的例子,它直接复制作为参数传递的对象。@FrankFarmer:问题是,在Java和PHP5中,对象都不是值。创建新对象时,将获得对象引用。如果你看一种语言,你可以把对象作为值,并通过值,例如C++,那么当你传递对象时,它的拷贝就等于PHP的(通过引用传递的对象,按值复制的原语),就像我相信的C++一样。您指的是哪种强类型语言?Java不通过引用传递对象;它复制对象引用的值;看,很公平。基于laurentb下面的示例,您似乎可以对PHP说同样的话,这只是加强了我的观点:PHP和Java中传递参数的方式几乎无法区分。我还在等待一个“强类型语言”的例子,它直接复制作为参数传递的对象。@FrankFarmer:问题是,在Java和PHP5中,对象都不是值。创建新对象时,将获得对象引用。如果你看一种语言,你可以把对象作为值并通过值,例如C++,那么当你传递对象时,它就复制它们。