1

「Player」と呼ばれる非常に大きな 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 変数)。

4

3 に答える 3

1

のような複数のクラスを作成しPlayerStatistics、それらを Player クラスWeaponPlayerActionsリンクすることができます...例:

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

このような行で:

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

statisticsPlayerクラスのメンバーにアクセスしています。連鎖を使用するには、その変数もオブジェクトである必要があります。getAttackメソッドを含む別のStatisticsクラスを作成できます。次に、Playerクラスコンストラクター$this->statisticsで、Statisticsクラスのインスタンスに初期化します。

同様にstuffdoActionの場合、それらはオブジェクトである必要があります。それらが別々のオブジェクトの本当に適切な候補であるかどうかはわかりませんが。

于 2011-10-31T15:01:27.093 に答える
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 に答える