了解类(使用它们做什么)


Understanding Classes (What to use them for)

我有一个关于如何使用类的快速问题。我被称为编程初学者,并为自己设定了一个创建基于网络的小型游戏来学习的任务。在游戏中,我想拥有各种单位类型(即剑士、骑兵、弓箭手)。有人告诉我,我应该为每种类型的单元创建一个单独的类,但是我也被告知要创建一个类,例如"类单元"。使用类的正确方法是什么?如果这含糊不清,我深表歉意,但我想不出更好的措辞方式。在这个网站上搜索了其他与类相关的问题,它们似乎没有涵盖这种类型的用法。

class unit {
$unitName = "";
$unitSpeed = "";
$unitHealth = "";
$unitDamage = "";
}

class archer {
$archerSpeed = "";
$archerHealth = "";
$archerDamage = "";
}
class cavalry {
$cavalrySpeed = "";
$cavalryHealth = "";
$cavalryDamage = "";
}

我组织代码的更好方法,如下所示:

abstract class Unit
{
    public $speed=0;
    public $health=0;
    public $damage=0;
}

class Archer extends Unit
{
}

class Wizard extents Unit
{
    public $mana;
}
class ArcherAdvanced extends Unit
{
    public function __construct() 
    {
        $this->health = 4; 
    }
}

使用此结构,您必须始终使用特定的类,但实现起来可能非常容易。为不同的用法添加一些属性也很容易(如向导)。

您可以在其他类中使用它,如下所示:

class Game
{
    public  function run()
    {
        $gandalf = new Wizard();
        $legolas = new Archer();
        // then fight!!
    }
}

我希望这会有所帮助。但是我建议看看这里:http://www.phptherightway.com/

在类 ArcherAdvanced 中,当您使用它时,并执行新的 ArcherAdvanced(),yuou 会自动将生命值设置为值 = 4。

做你想做的事的一种方法是使用子类。看这里:http://php.net/manual/en/language.oop5.inheritance.php

您将创建一个名为"unit"的基类,该基类将包含所有类型的单元之间通用的所有信息。

然后,您将为每种类型的单元创建一个类,其中包含使这种类型的单元与其他单元不同的任何逻辑。

使用这种方法,您不重复所有单元通用的代码(这可能会发生在 3 个不同的类中),并且如果它们之间的代码属于类文件之间存在差异,您就是"DRY"(如果仅使用一个"单元"类,您可能必须使用条件来完成同样的事情)。

下面是基本代码的外观:

class Unit {
//Defaults for all units
$unitName = ""; 
$unitSpeed = "1";
$unitHealth = "1";
$unitDamage = "1";
}
class Archer extends Unit{
$unitName = "archer";
}
class Cavalry extends Unit {
$unitName = "cavalry";
}