【问题标题】:passing by reference won't work in php通过引用传递在 php 中不起作用
【发布时间】:2016-08-01 09:28:18
【问题描述】:

我正要制作一个过滤器助手,并通过引用传递的基本替换功能来测试我的想法,但它不起作用!

<?php
$text ="hello world i am here !";

 function findandreplace(&$text, $search, $replaced)
 {

    return str_replace($search, $replaced, $text);

 }

print findandreplace($text,'e','E');
print "<br>";
print $text;

输出总是这样:

hEllo world i am hErE !
hello world i am here !

我尝试了可能的事情,但我不会工作,那是我的错。

【问题讨论】:

  • 如果您使用的是按引用传递,为什么还要返回 $text?.... 但是 str_replace() 本身不是按引用传递,它返回修改后的值
  • 我尝试使用 return 然后我 omtt 它,它也不会工作,但没有 return ,它给出了一个通知 [注意:只有变量引用应该通过引用返回]

标签: php pass-by-reference


【解决方案1】:

您没有对传递的$text 字符串进行任何更改,因为str_replace 不会修改传入的字符串 - 它接收传入值的副本,并返回结果。它 如果将str_replace 的结果分配给$text 变量,它将按预期工作:

 $text ="hello world i am here !";

 function findandreplace(&$text, $search, $replaced)
 {

    $text =  str_replace($search, $replaced, $text); //<-- now it will work
    return $text;

 }

print findandreplace($text,'e','E');
print "<br>";
print $text;

【讨论】:

  • 为什么要返回通过引用传递的东西?我知道它来自 OP 的代码,但仍然不是多余的吗?
  • @HankyPanky 是的,它是多余的,我希望 OP 添加返回,以便他可以运行“测试” - 将输出与初始引用的变量进行比较。
  • 这可以很容易地更改为先打印$text,然后调用该函数,然后至少在这个答案中再次打印$text,因为它很好地解释了OP的错误
  • @HankyPanky 也是如此,也许我应该对任何未来的访问者进行编辑
  • 感谢@Steve,这让我大吃一惊,我添加了 return,因为我在删除它时注意到错误 [注意:只有变量引用应该通过引用返回]
猜你喜欢
  • 2012-02-10
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多