是否可以在另一个功能中包含一个功能?为了学习功能,我正在尝试使用PHP创建一个战斗序列.序列如下所示:
骰子会滚动,为变量分配数字;
打印Hero1攻击结果;
骰子会滚动,为变量分配数字;
Hereo2攻击结果打印出来;
骰子会滚动,为变量分配数字;
打印Hero3攻击结果.
骰子滚动将是一个自动功能.这是代码:
rollSim(); combatSim(); function rollSim() { $hAttack = rand(1,20); $mDefend = rand(1,20); $mAttack = rand(1,20); $hDefend = rand(1,20); $mDamage = rand(10,25); $hDamage = rand(1,20); } // end rollSim function combatSim() { rollSim(); if ($hAttack>$mDefend) { print "Hero hit monster for $hDamage damage.
"; } else if ($hAttack<=$mDefend) { print "Hero missed monster."; } } // end combatSim ?>
Jeremy Ruten.. 19
您的rollSim()
函数应返回滚动的数字,而不是设置一些变量并尝试在其他函数中使用它们.我会在关联数组中返回它们,如下所示:
function rollSim() { $roll['hAttack'] = rand(1,20); $roll['mDefend'] = rand(1,20); $roll['mAttack'] = rand(1,20); $roll['hDefend'] = rand(1,20); $roll['mDamage'] = rand(10,25); $roll['hDamage'] = rand(1,20); return $roll; } function combatSim() { $roll = rollSim(); if ($roll['hAttack'] > $roll['mDefend']) { print "Hero hit monster for {$roll['hDamage']} damage.
"; } else if ($roll['hAttack'] <= $roll['mDefend']) { print "Hero missed monster."; } }
chaos.. 10
不,你不能真正做你所要求的.即使你在(你可以做的,这是合法的但没有实际效果)rollSim()
的定义中嵌入了声明,combatSim()
你设置的变量rollSim()
仍然是本地的,并且不可访问combatSim()
.
您需要一种更好的方式来传递您所关心的信息.Jeremy Ruten讲述了一个很好的方法.另一种方法是定义一个负责建模你的战斗事件的对象,rollSim()
并且combatSim()
两者都是方法.
class myCombat { private $hAttack; private $mDefend; private $mAttack; private $hDefend; private $mDamage; private $hDamage; function rollSim() { $this->hAttack = rand(1, 20); $this->mDefend = rand(1, 20); $this->mAttack = rand(1, 20); $this->hDefend = rand(1, 20); $this->mDamage = rand(10, 25); $this->hDamage = rand(1, 20); } function combatSim() { $this->rollSim(); if($this->hAttack > $this->mDefend) echo 'Hero hit monster for ' . $this->hDamage . ' damage.
'; else echo 'Hero missed monster'; } } $combat = new myCombat; $combat->combatSim();
Kalium.. 5
你可以互相调用函数,当然......但我认为你想要使用另一个的范围,对吗?
分享范围是一项混乱的业务.传递参数你最好.
您的rollSim()
函数应返回滚动的数字,而不是设置一些变量并尝试在其他函数中使用它们.我会在关联数组中返回它们,如下所示:
function rollSim() { $roll['hAttack'] = rand(1,20); $roll['mDefend'] = rand(1,20); $roll['mAttack'] = rand(1,20); $roll['hDefend'] = rand(1,20); $roll['mDamage'] = rand(10,25); $roll['hDamage'] = rand(1,20); return $roll; } function combatSim() { $roll = rollSim(); if ($roll['hAttack'] > $roll['mDefend']) { print "Hero hit monster for {$roll['hDamage']} damage.
"; } else if ($roll['hAttack'] <= $roll['mDefend']) { print "Hero missed monster."; } }
不,你不能真正做你所要求的.即使你在(你可以做的,这是合法的但没有实际效果)rollSim()
的定义中嵌入了声明,combatSim()
你设置的变量rollSim()
仍然是本地的,并且不可访问combatSim()
.
您需要一种更好的方式来传递您所关心的信息.Jeremy Ruten讲述了一个很好的方法.另一种方法是定义一个负责建模你的战斗事件的对象,rollSim()
并且combatSim()
两者都是方法.
class myCombat { private $hAttack; private $mDefend; private $mAttack; private $hDefend; private $mDamage; private $hDamage; function rollSim() { $this->hAttack = rand(1, 20); $this->mDefend = rand(1, 20); $this->mAttack = rand(1, 20); $this->hDefend = rand(1, 20); $this->mDamage = rand(10, 25); $this->hDamage = rand(1, 20); } function combatSim() { $this->rollSim(); if($this->hAttack > $this->mDefend) echo 'Hero hit monster for ' . $this->hDamage . ' damage.
'; else echo 'Hero missed monster'; } } $combat = new myCombat; $combat->combatSim();
你可以互相调用函数,当然......但我认为你想要使用另一个的范围,对吗?
分享范围是一项混乱的业务.传递参数你最好.