PHP: передать переменную в функцию, сделать что-то с переменной, вернуть ее обратно - PullRequest
2 голосов
/ 26 августа 2010

Принимая следующий код:

<?php
function doStuff($rowCount) {
    $rowCount++;
    echo $rowCount.' and ';
    return $rowCount;
}
$rowCount = 1;
echo $rowCount.' and ';
doStuff($rowCount);
doStuff($rowCount);
doStuff($rowCount);
?>

Желаемый вывод

1 and 2 and 3 and 4 and

Фактический вывод

1 and 2 and 2 and 2 and

Я так понимаю, я не понимаю, как работает "возврат" в этом контексте. Как мне лучше всего это сделать?

Ответы [ 5 ]

10 голосов
/ 26 августа 2010

Вы должны либо присвоить возвращаемое значение вызовов doStuff локальной переменной $rowCount:

$rowCount = 1;
echo $rowCount.' and ';
$rowCount = doStuff($rowCount);
$rowCount = doStuff($rowCount);
$rowCount = doStuff($rowCount);

Или передать переменную как ссылку с помощьюпоместив & перед формальным параметром $rowCount:

function doStuff(&$rowCount) {
    $rowCount++;
    echo $rowCount.' and ';
    return $rowCount;
}

Теперь формальный параметр $rowCount внутри функции doStuff ссылается на то же значение, что и переменная, которая передается doStuff в вызове функции.

2 голосов
/ 26 августа 2010

Вы должны попробовать это:

$rowCount = 1;
echo $rowCount.' and ';
$rowCount = doStuff($rowCount);
$rowCount = doStuff($rowCount);
$rowCount = doStuff($rowCount);

Ваш метод doStuff() возвращает int, который никогда не используется, когда вы просто используете оператор doStuff($rowCount); без присваивания.

1 голос
/ 26 августа 2010

Вам нужно передать переменную «по ссылке» вместо «по значению», чтобы выполнить это, добавить & к переменной в объявлении функции:

function doStuff(&$rowCount);

Также проверьте PHP: Передача по ссылке

1 голос
/ 26 августа 2010

Я бы просто попытался исправить код: ...

<?php
function doStuff($rowCount) {
    $rowCount++;
    echo $rowCount.' and ';
    return $rowCount;
}
$rowCount = 1;
echo $rowCount.' and ';
doStuff(doStuff(doStuff($rowCount)));

?>
1 голос
/ 26 августа 2010

изменение function doStuff($rowCount)

до function doStuff(&$rowCount)

Обычно в PHP вы отправляете копию переменной в функцию, поэтому изменения внутри функции не влияют на значение переменной вне функции. Добавление амперсанда говорит PHP, что вместо этого следует отправлять ссылку на переменную, чтобы изменения в переменной передавались обратно вызывающей стороне.

...