2011-10-31 26 views
1

我有一個非常大的PHP類叫「播放器」。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()); 

如果認爲我要創建這個對象內部的對象,但如果我這樣做,我無法訪問的主要「玩家$」的對象數據(例如,在對象的東西,我不能選手對象的$級別的變量訪問。)

回答

1

您可以創建多個clases像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,這取決於之間的關係對象。

希望這會有所幫助

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

在這樣一行:

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

您正在訪問Player類的statistics成員。爲了使用鏈接,該變量也必須是一個對象。您可以創建一個單獨的統計類,其中包含一個getAttack方法。然後在Player類的構造函數中,將$this->statistics初始化爲Statistics類的一個實例。

同樣對於stuffdoAction,它們需要是對象。雖然我不確定它們是否適合單獨的對象。

相關問題