Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.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
Php 为什么代码以WRT引用返回的方式运行?_Php_Copy On Write_Reference - Fatal编程技术网

Php 为什么代码以WRT引用返回的方式运行?

Php 为什么代码以WRT引用返回的方式运行?,php,copy-on-write,reference,Php,Copy On Write,Reference,这是我的设置: 显示\u启动\u错误=打开 显示错误=打开 错误报告=E|u ALL | E|u STRICT $b; function func ($name) { global $b; $b = 10; return $b; } $a =& func("myname"); ++$a ; echo '<br/>$a= '.$a.' $b= ' .$b."<br/>"; xdebug_debug_zval('a'); echo "<br/&g

这是我的设置:
显示\u启动\u错误=打开
显示错误=打开
错误报告=E|u ALL | E|u STRICT

$b;
function func ($name) {
  global $b;
  $b = 10;
  return $b;
  }
$a =& func("myname");
++$a ;
echo '<br/>$a= '.$a.' $b= ' .$b."<br/>";
xdebug_debug_zval('a'); echo "<br/> ";
$b;
函数func($name){
全球10亿美元;
$b=10;
返回$b;
}
$a=&func(“我的名字”);
++$a;
回音“
$a=”.$a.$b=”.$b.“
”; xdebug_debug_zval('a');回声“
”;
上面的代码输出是以下注意事项:

严格的标准:只有变量应该通过引用在/path/to/file/file.php中的“某些行号”行指定
$a=11$b=10
a:(refcount=1,is_ref=0)=11

为什么上面的代码显示通知?为什么会发生抄写呢?

$b;
function &func ($name) {//change here: to return a reference.
  global $b;
  $b = 10;
  return $b;
  }
$a =& func("myname");
++$a ;
echo '<br/>$a= '.$a.' $b= ' .$b."<br/>";
xdebug_debug_zval('a'); echo "<br/> ";
$b;
函数&func($name){//change here:返回引用。
全球10亿美元;
$b=10;
返回$b;
}
$a=&func(“我的名字”);
++$a;
回音“
$a=”.$a.$b=”.$b.“
”; xdebug_debug_zval('a');回声“
”;
上述代码将输出:

$a=11$b=11
a:(refcount=1,is_ref=1)=11

为什么这里没有严格的标准通知?这里是参考资料。

$b;
function &func ($name) {
  global $b;
  $b = 10;
  return $b;
  }
$a = func("myname"); //change here: removed &
++$a ;
echo '<br/>$a= '.$a.' $b= ' .$b."<br/>";
xdebug_debug_zval('a'); echo "<br/> ";
$b;
函数&func($name){
全球10亿美元;
$b=10;
返回$b;
}
$a=func(“我的名字”)//此处更改:已删除&
++$a;
回音“
$a=”.$a.$b=”.$b.“
”; xdebug_debug_zval('a');回声“
”;
上述代码将输出:

$a=11$b=10
a:(refcount=1,is_ref=0)=11

为什么这里会发生抢劫案?

$b;
function &func ($name) {//change here: to return a reference.
  global $b;
  $b = 10;
  return $b;
  }
$a =& func("myname");
++$a ;
echo '<br/>$a= '.$a.' $b= ' .$b."<br/>";
xdebug_debug_zval('a'); echo "<br/> ";

有关xdebug_debug_zval的信息,请访问。

&
PHP中的运算符作为参考在最新版本中被删除。特别是从PHP5。 现在,所有引用类型数据(类等)都通过引用自动传递


阅读并确认您的第二个代码片段工作正常

在PHP中,如果希望通过引用返回,则在赋值时还必须在定义中编写use
&
运算符。看见因此,第二个具有正确的语法,并且在不发出任何警告的情况下工作

第一个代码段给出了警告,因为您尚未定义此函数将返回引用,并且您仍在按引用分配其返回值。所以,这是行不通的。(请参见
a
的值增加到11,但
b
仅为10。)


在第三个代码段中,您并没有分配引用,所以它并没有给出任何警告。(但是因为这个引用不起作用。(参见
a
b
的值的区别)

我怎么会错过这个:这完全掩盖了我的问题! 来自PHP手册

注意:如果您试图从语法为:return($this->value)的函数返回引用;这将不起作用,因为您正试图通过引用返回表达式的结果,而不是变量。您只能通过引用从函数返回变量,其他什么都不能。由于PHP4分支中的PHP4.4.0和PHP5分支中的PHP5.1.0,如果代码试图返回动态表达式或resu,则会发出E_NOTICE错误新接线员的lt

要使用返回的引用,必须使用引用分配:

<?php
function &collector() {
  static $collection = array();
  return $collection;
}
$collection = &collector();
$collection[] = 'foo';
?>


否,除非您明确定义它,否则它不会通过引用传递。在您提供的链接上,只有您可以看到,他们正在使用
&
运算符,因此它通过引用返回。@Pradeep我发布了两个链接。您看到第一个了吗?@Shilpu是的,在第一个链接中,您可以看到他们使用了
&
运算符。他们提到了在PHP中,尝试优化传递返回值,但这不会改变行为。