如果在函数调用中分配了var,则PHP忽略通过引用传递
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如果在函数调用中分配了var,则PHP忽略通过引用传递,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1571字,纯文字阅读大概需要3分钟。
内容图文
我有两个功能
function c( &$x )
{
$x = 25;
echo 'c is called, x = ' . $x . PHP_EOL;
}
function b()
{
echo 'b is called'. PHP_EOL;
return 5;
}
然后我编写下面的代码,正如我所期望的那样,应该将b()的结果放到$o,然后通过引用传递$o,将其设置为新值.它工作正常:
$o=b();
c( $o );
echo 'o is '.$o;
输出符合预期:
06002
但是,如果我尝试在函数调用中分配$o的值,如下所示:
c( $o = b() );
echo 'o is '.$o;
我得到奇怪的输出
06004
函数调用的顺序仍然是相同的,但为什么$o不会被引用传递?如果在函数调用中赋值,PHP是否强制传递参数值?如果是,那么这个版本的工作方式是什么?根据这一评论:2006年的http://www.php.net/manual/en/functions.arguments.php#71198它的工作方式不同.我的版本是5.3.6
解决方法:
这是我之前遇到的Zend引擎的限制,特别是在使用socket_select()/ stream_select()时,它们都需要通过引用传递“数据资源”参数.能够在一行中分配要通过引用传递的变量的值会很好,但是(目前)不可能这样做.
我之前已经看过它(虽然现在我找不到哪里,(它是here)并且它可能不是权威的)但是PHP中的任何表达式都会在表达式的右侧进行求值.我的意思是:
$a = 1;
$b = 2;
echo $a = $b;
这将回显2,因为传递echo语句的表达式计算表达式$b的右侧,即2.
将表达式的结果传递给函数时,例如c($o = b());你在哪里传递$o = b()的结果;对于函数c(),我的理解(尽管我可能是错的)表达式的结果被传递到函数并且函数被执行,在创建zval并指定为持有$o之前,行为是旨在减少内存消耗,并在以这种方式嵌套函数时加速内部处理.这意味着您实际上没有通过引用传递变量,您只是传递了由b() – 表达式的右侧 – 产生的值 – 由于它没有变量容器,因此无法通过引用进行修改.
实际上,如果您打开E_STRICT消息,您将看到以下错误:
Strict Standards: Only variables should be passed by reference in …
……所以这种行为实际上是“按设计”.
内容总结
以上是互联网集市为您收集整理的如果在函数调用中分配了var,则PHP忽略通过引用传递全部内容,希望文章能够帮你解决如果在函数调用中分配了var,则PHP忽略通过引用传递所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。