Php 将变量从一个函数传递到另一个函数

Php 将变量从一个函数传递到另一个函数,php,function,variables,Php,Function,Variables,我在一个函数中设置了一个变量,我正试图在另一个函数中使用它。人们似乎建议不要在函数中使用globals 这段代码在我的第一个变量中 if($this->CheckAndSetupContractHitman($player_data_tab,$player_defence_data_tab)) $winner_exp = $winner_exp + floor($winner_exp*0.4); if($this->CheckAndSetupContractHitman($pl

我在一个函数中设置了一个变量,我正试图在另一个函数中使用它。人们似乎建议不要在函数中使用globals

这段代码在我的第一个变量中

 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\u exp
。我是否应该添加退货
$bonus\u exp,然后将
$bonus\u exp
作为第二个变量的参数,如下所示

function CheckAndSetupContractHitman($player_data_tab,$player_defence_data_tab,$bonus_exp)
也许你在找


我认为您应该为您的问题想出另一种解决方案,但通过引用传递比使用全局传递更好。

我会按照您的建议,使用
返回并传递参数。只有一个例外:让它等于零(空)——那样。。该函数在技术上不需要它作为输入,您可以根据自己的判断是否包含它

function CheckAndSetupContractHitman($player_data_tab,$player_defence_data_tab,$bonus_exp = ''){
    if ($bonus_exp != ''){
        // Do something
    }
// ....
return bonus_exp;
}
这样设置--如果调用函数而不调用
$bonus\u exp
IE

CheckAndSetupContractHitman($player_data_tab,$player_defence_data_tab);
$bonus\u exp
将设置为
'

但是如果你已经设置好了,并且通过了。。。它将被设置为您通过的任何内容。即

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

$bonus\u exp
将作为
50
传递到函数中。

基本上有两种方法可以从函数中获取一些变量

首先,正如你所说,通过参考传递

另一个是返回值。当您返回如下数组时,可以使用return获取多个值:

if(expression){
    return ["exp" => $exp, "bonus",$bonus];
} else {
   return false;
}    
所以你可以用like

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

我更喜欢第二个。你不应该执行两次相同的函数。

我不确定我是否正确理解你的要求,但是作为一般规则,如果你有
函数example1()
并且你从
函数example2()
中调用它,你想在
example2()中使用的
中的任何东西
。如果要在
example2()
中使用
example1()
中的任何内容,请从内部返回
example2()
当然也有例外,例如通过引用传递,但这是一般的经验法则。您也有全局变量,但正如您所说的,不推荐使用全局变量。我不确定我是否知道这样做的原因,但我认为这是为了防止您在某个地方意外地覆盖它。作为参数传递并返回也是更好的形式。@Chipster但是。注:这里有两个链接:首先,理解“变量”和“函数”之间的区别。然后,因为你似乎在一个对象内部,你会想理解什么是“属性”和“方法”。答案可能在于使用类属性。好的,谢谢你的帮助。我认为返回会导致函数结束,对吗?所以我必须使用return$bonus\u exp;在我的第一个函数结束时,如何将其从函数中取出?现在有几种方法可供选择,而不是返回数组