PHP>如何将一个类分成多个类?

时间:2011-10-31 14:42:19

标签: php class object constructor-chaining

我有一个非常大的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对象中,我无法访问在Player对象的$ level变量上。)

3 个答案:

答案 0 :(得分:1)

您可以创建多个条目,例如PlayerStatisticsWeaponPlayerActions,并将它们链接到播放器类...示例:

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;
    }
}

类似的东西......它是object composition or aggregation,取决于对象之间的关系。

希望这有帮助

答案 1 :(得分: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
  }
}

答案 2 :(得分:0)

在这样的一行:

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

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

同样对于stuffdoAction,它们需要是对象。虽然我不确定它们是否适合单独的物体。