Передача переменных из одной функции в другую - PullRequest
1 голос
/ 20 марта 2019

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

Этот код находится в моей первой переменной

 if($this->CheckAndSetupContractHitman($player_data_tab,$player_defence_data_tab)) $winner_exp = $winner_exp + floor($winner_exp*0.4);

 if($this->CheckAndSetupContractHitman($player_data_tab,$player_defence_data_tab)) $bonus_exp = floor($winner_exp*0.2857); 

Это переменная $bonus_exp, которую я пытаюсь передать другой функции,Должен ли я добавить return $bonus_exp; в конце первой переменной, а затем добавить $bonus_exp в качестве аргумента ко второй переменной, например так?

function CheckAndSetupContractHitman($player_data_tab,$player_defence_data_tab,$bonus_exp)

Ответы [ 3 ]

1 голос
/ 20 марта 2019

Может быть, вы ищете Передача по ссылке

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

0 голосов
/ 20 марта 2019

Обычно есть два способа получить некоторые переменные из функции.

Во-первых, как вы сказали, передайте по ссылке.

Другой - это возвращаемое значение.Можно получить более 1 значения с возвратом, когда вы возвращаете массив вроде:

if(expression){
    return ["exp" => $exp, "bonus",$bonus];
} else {
   return false;
}    

Так что вы можете использовать как

if($array = topFunction($param1,$param2)){
    $exp = $array["exp"];
    $bonus = $array["bonus"];
}

Я предпочитаю второе.Вы не должны выполнять 2 раза одну и ту же функцию.

0 голосов
/ 20 марта 2019

Я бы сделал, как вы предлагаете, используя return и передав параметр. С одним исключением: сделать его равным ничто (пусто) - таким образом. Функция не технически не нуждается в ней как вход, и вы можете просто включить ее или нет по своему усмотрению.

function CheckAndSetupContractHitman($player_data_tab,$player_defence_data_tab,$bonus_exp = ''){
    if ($bonus_exp != ''){
        // Do something
    }
// ....
return bonus_exp;
}

Настроить таким образом - если вы вызываете функцию без $bonus_exp IE

CheckAndSetupContractHitman($player_data_tab,$player_defence_data_tab);

$bonus_exp будет установлен на ''

Но если он установлен и передать , он будет ... Он будет установлен на то, что вы пропустили. IE

$bonus_exp = 50;
CheckAndSetupContractHitman($player_data_tab,$player_defence_data_tab,$bonus_exp);

$bonus_exp будет передано как 50 в функцию.

...