PHP: Само променливи могат да се предават по референция

Получавам тази грешка на ред 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++;
    }

}

person Edward Yu    schedule 24.06.2013    source източник
comment
str_replace може да вземе масив .. не е нужно да правите цикъл   -  person Baba    schedule 24.06.2013
comment
От ръководството: Ако е прието, това ще бъде зададено на броя на извършените замени. Това означава, че функцията актуализира стойността на четвъртите параметри. Трябва просто да посочите името на променливата като референция.   -  person user1402647    schedule 24.06.2013
comment
възможен дубликат на PHP: ... могат да се предават променливи по препратка в str_replace()?   -  person T.Todua    schedule 19.11.2014


Отговори (2)


Не можете да подадете константа от 1, поправката е да я зададете на променлива като така.

промяна:

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

to:

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

АКТУАЛИЗАЦИЯ: Променено, за да се декларира променлива извън извикването на метода от обратната връзка в коментарите.

person immulatin    schedule 24.06.2013
comment
str_replace($key, $value, $password, $var = 1); също е неправилно, използвайте str_replace($key, $value, $password, $var);. в противен случай ще получите Strict Standards: Only variables should be passed by reference in...... - person bystwn22; 24.06.2013
comment
@bystwn22 Благодаря, нямам тези настройки локално, така че никога не бих видял тази грешка. Актуализирах отговора - person immulatin; 24.06.2013

Преминаването на 1 там няма смисъл. (Защо не подадете 42 или -5?) Четвъртият параметър на str_replace се използва само за предаване на информация обратно към вас. Функцията не използва първоначалната стойност на променливата въобще. И така, какъв би бил смисълът (дори и да е позволено) да предавате нещо, ако то не се използва и вие няма да използвате новата стойност, изпратена обратно до вас? Този параметър не е задължителен; просто не пропускайте нищо.

person newacct    schedule 25.06.2013
comment
Точно така, това е често срещана грешка да се смята, че 4-тият аргумент е да зададете броя на замяната. Както казва документът: count: If passed, this will be set to the number of replacements performed. - person Erdal G.; 02.11.2014