1

我有一个非常大的 PHP 类,称为“播放器”。

里面有很多函数(差不多2000行)。实际上,我以这种方式使用这些功能:

$player = new Player(1)
echo $player->getLogin();
echo $player->getStatisticPerception();
echo $player->getWeaponId();
echo $player->attackPlayerId(3,$player->getWeaponId());

我认为将这个类分成多个类可能是个好主意,但我不知道如何。我怎么能创建类似的东西,例如:

$player = new Player(1);
echo $player->getLogin();
echo $player->statistics->getAttack();
echo $player->stuff->getWeaponId();
echo $player->doAction->attackPlayerId(3, $player->getWeaponId());

如果我认为我必须在这个对象中创建一个对象,但如果我这样做了,我将无法访问主“$player”的对象数据(例如,在 Stuff Object 中,我无法访问 $播放器对象的级别变量。)

4

3 回答 3

1

您可以创建多个类,例如PlayerStatisticsWeapon并将PlayerActions它们链接到 Player 类......一个例子:

class Player{
    private Statistics; 
    private Weapon;

    function __construct(){
        $this->Statistics = new Statistics($this);
        $this->Weapon = new Weapon($this);
    }

    function getAttack(){
        return $this->Statistics->getAttack();
    }
}

class Statistics{
    private Player;
    function __construct($_player){
         $this->Player = $_player;
    }
}

类似的东西......它是一个对象组合或聚合,取决于对象之间的关系。

希望这可以帮助

于 2011-10-31T15:09:15.877 回答
0

您可以使用类继承

Class Player {
  protected $level;
  public $stuff;
  function __construct() {
    $this->stuff = new Stuff();
  }
}

Class Stuff extends Player {
  function getWeaponId() {
    // You can access Player's $level here using $this->level
  }
}
于 2011-10-31T14:58:10.513 回答
0

在这样的一行中:

echo $player->statistics->getAttack();

您正在访问statisticsPlayer 类的成员。为了使用链接,该变量也必须是一个对象。您可以创建一个包含getAttack方法的单独的统计类。然后在 Player 类的构造函数中,初始化$this->statistics为 Statistics 类的一个实例。

同样,对于stuffand doAction,它们也需要是对象。尽管我不确定它们是否真的适合单独的对象。

于 2011-10-31T15:01:27.093 回答