我有一个非常大的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变量上。)
答案 0 :(得分:1)
您可以创建多个条目,例如PlayerStatistics
,Weapon
和PlayerActions
,并将它们链接到播放器类...示例:
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类的实例。
同样对于stuff
和doAction
,它们需要是对象。虽然我不确定它们是否适合单独的物体。