PageUp
@PageUp
Default

Как получить значение из огромной функции, не выходя из нее?

Всем привет! Вопрос такого плана. Есть рабочая функция, очень огромная, в которой происходит большой процесс, там разные расчеты, запись в файлы и циклы. Это к тому, что не смогу сюда все скопировать. Что бы вы представляли.

В этой функции есть строка, обязательная, в которой присваивается значение переменной. А именно в значение 1.

В коде вызова этой функции, следом после этого идет условие- если это значение равно 1, то нужно вызвать вновь эту же самую функцию, но входящие в нее переменные будут немного другие уже.

Я пробовал назначать переменной внутри функции путем Return, но в этом месте функция заканчивает свою работу и из нее просто выходит.

Пытался вызвать эту же функцию внутри себя, вместо назначения переменной, тоже не получается. Не работает.

Как сделать так, что бы после полного завершения работы функции, получить переменную со значением, назначенным в процессе ее выполнения?
  • Вопрос задан
  • 1821 просмотр
Пригласить эксперта
Ответы на вопрос 3
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
Вам помогут static переменные функции.
function foo() {
    static $bar;

    $bar++;
    retrurn $bar;
}

echo foo(); //1
echo foo(); //2
echo foo(); //3
Ответ написан
@svetlov97
А почему не вызвать return в конце вашей ОГРОМНОЙ функции? Или вам нужна переменная до завершения рекурсии? Вам нужны промежуточные значения?
Если так то просто добавьте переменную с типом Array вне функции и дописывайте промежуточные значения.
Ответ написан
Комментировать
@Ivan_Bukun
Конкретно по вопросу:
1)создать переменную
2) передать функции переменную по ссылке и вызвать функцию
3) проверять значение переменной из пункта 1(значение переменной должно изменится после выполнения функции)
4) твои условия.

Я не знаю php, поэтому написал пример на C#, но переменные по ссылке, есть и в php, так что это можно загуглить.

static void Main(string[] args)
{
    int changeVar = 0; //1)
    int anotherParam = 1;
    do{
        MyFunction(ref changeVar, anotherParam); //2)
        if (changeVar ==1)//3)
        {
            anotherParam +=1;//4)
        }
    }while(changeVar == 1)//4)
}
static void MyFunction(ref int changeVar, int anotherParam)
{
    if (anotherParam < 10) changeVar = 1;
    else changeVar = 0;
}

При изменении значения переменной переданной по ссылке, изменяется значение и вне функции, поскольку они ссылаются на одну область памяти.

А вообще лучше большие функции дробить на маленькие, те же расчёты и запись в файлы. И исходя из этого можно заканчивать функцию где присваивается значение той переменной и возвращать это значение в качестве значения функции. А потом уже делать всякие проверки и повторение функции или другие действия. Если у тебя получается такая штука, которую ты описал, то у тебя код неправильно логически построен.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы