PHP:只有变量可以按引用传递

18

我在57行遇到了这个错误:$password = str_replace($key, $value, $password, 1);

据我所知,我只传递了变量。以下是更多上下文信息:

$replace_count = 0;
foreach($replacables as $key => $value)
{
    if($replace_count >= 2)
        break;
    if(strpos($password, $key) !== false)
    {
        $password = str_replace($key, $value, $password, 1);
        $replace_count++;
    }

}

str_replace 可以接受数组作为参数.. 你不需要循环。 - Baba
1
从手册中: "如果传递,这将被设置为执行的替换次数"。这意味着函数会更新第四个参数的值。您只需指定变量名称作为引用即可。 - user1402647
2个回答

13

你不能传递常量1,解决方法是将其设置为变量。

更改为:

$password = str_replace($key, $value, $password, 1);

致:

$var = 1
$password = str_replace($key, $value, $password, $var);

更新: 根据评论反馈更改,将变量声明移至方法调用之外。


使用 str_replace($key, $value, $password, $var = 1); 是错误的,应该使用 str_replace($key, $value, $password, $var);。否则会出现严格标准错误提示:Strict Standards: Only variables should be passed by reference in...... - bystwn22
@bystwn22 谢谢,我本地没有这些设置,所以从未看到过这个错误。我已经更新了答案。 - immulatin

11
传递 1 没有意义。(为什么不传递 42 或者 -5?) str_replace 的第四个参数只是用来将信息传递回给你的。函数根本不使用变量 原始值。所以即使允许传入一个值,也没有任何意义,因为它不会被使用,而且您也不会使用新值。该参数是可选的;根本不需要传递任何东西。

4
没错,认为第四个参数是设置替换次数是一个常见误解。正如文档所述: count: 如果传递了此参数,将设置为执行的替换次数。 - Erdal G.
1
如果你读了几遍,像我一样仍然没有联系起来 - performed = after 替换发生,所以结果的计数(你需要另一种方式来限制在 haystack 中替换 needle 的次数)。 - Sandra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接