我非常感谢有一个使用PHP,OOP和Extends的简化示例。
创建角色类的示例,两种特定类型Mage and Warrior和一个战斗系统。
类似的东西:
class Character{
}
class Wizard extends Character{
}
class Warrior extends Character{
}
class Battle {
}
只是为了理解逻辑。
答案 0 :(得分:4)
这只是一个开始点,对你的案子来说是一个糟糕的例子。
每个角色都有一个名字。 因此,字符的名称可以在Character类中。
class Character {
public $name = "unknown";
}
每个人都有标准的力量和生命
class Character {
public $name = "unknown";
public $force = 10;
public $life = 100;
}
扩展类继承了这些属性。例如:
$me = new Wizard();
echo "The name of wizard is " . $me->name; // The name of wizard is unknown
我们可以在costructor方法中设置字符名称
class Character {
public $name = "unknown";
public $force = 10;
public function __construct($name) {
$this->name = $name;
}
}
$me = new Wizard("Gandalf");
echo "The name of wizard is " . $me->name; // The name of wizard is Gandalf
向导有一个简单角色没有的东西。以法力为例:
class Wizard extends Character{
public $mana = 100;
}
和
$me = new Wizard("Gandalf");
echo "The name of wizard is " . $me->name; // The name of wizard is Gandalf
echo "\nAnd its mana is " . $me->mana;
战士拥有标准力量的乘数,因为他有武器。
class Warrior extends Character{
public $weapon = 12;
}
$opponent = new Warrior("Grunt");
echo "The name of warrior is " . $opponent->name . " and the powrfull of its weapon is " . $opponent->weapon;
每个角色都有强大的力量取决于它的力量:
class Character {
public $name = "unknown";
public $force = 10;
public $life = 100;
public function __construct($name) {
$this->name = $name;
}
protected function get_powerfull() {
return $this->force;
}
}
但对于巫师来说,力量取决于法术力
class Wizard extends Character{
public $mana = 100;
// override
public function get_powerfull() {
return $this->mana;
}
}
并且战士依靠武器及其力量。
class Warrior extends Character{
public $weapon = 12;
// override
public function get_powerfull() {
return $this->weapon*$this->force;
}
}
每个角色都可以战斗,结果取决于强大的依赖于类
class Battle {
public function fight(Character $player1, Character $player2) {
$damage1 = $player1->get_powerfull();
$damage2 = $player2->get_powerfull();
$player1->life -= $damage2;
$player2->life -= $damage1;
echo "{$player1->name} hits {$player2->name} for $damage1 points.<br/>";
echo "{$player2->name} hits {$player1->name} for $damage2 points.<br/>";
}
}
和
$me = new Wizard("Gandalf");
echo "The name of wizard is " . $me->name . "<br/>"; // The name of wizard is Gandalf
echo "\nAnd its mana is " . $me->mana. "<br/>";
$opponent = new Warrior("Grunt");
echo "The name of warrior is " . $opponent->name . " and the powrfull of its weapon is " . $opponent->weapon. "<br/>";
所以:
$battle = new Battle();
$battle->fight($me,$opponent);
输出:
Gandalf hits Grunt for 100 points.
Grunt hits Gandalf for 120 points.
我希望这会有所帮助
答案 1 :(得分:3)
您发布的这个示例,简化:
class Character{
}
class Mage extends Character{
}
class Warrior extends Character{
}
class Battle {
}
我删除了空的评论,Warrior extends
之后的额外空格并更正了Mage
的拼写。