1

私はPHPでサッカーマネージャーシミュレーターを書いています[HARD AlGORITHMS !]

私は3つのクラスを持っています:

プレーヤー

class Player {

protected $name;

public function addAttr($name) {
    $this->name = $name;
}
}

チーム

class Team {

protected $name;

protected $players = array();


public function setName($name) {
    $this->name = $name;
}

public function getName() {
    return $this->name;
}

public function addPlayer($player) {
    $this->players[] = $player;
}

public function getPlayers() {
    print_r($this->players);
}

public function getOpponetsPosition() {
    GAME::getOpponetPlayersPosition();
}

ゲーム

class Game {

protected $t1;
protected $t2;

function setTeams($team1,$team2) {
    $this->t1 = $team1;
    $this->t2 = $team2;
}

function getOpponetPlayersPosition() {
        $this->t1->getPlayers();
}

}

とメインスクリプト

require_once 'classes/CPlayer.php';
require_once 'classes/CTeam.php';
require_once 'classes/CGame.php';

$game = new Game;

$team1 = new Team;
$team1->setName("PO-1");
$team2 = new Team;
$team2->setName("PO-2");

$p1 = new Player;
$p2 = new Player;


$p1->addAttr("payam babaiy");
$p2->addAttr("parsa babaiy");

$team1->addPlayer($p1);
$team2->addplayer($p2);

$game->setTeams($team1,$team2);

$team1->getOpponetsPosition();

TeamクラスのgetOpponetsPosition()関数を使用して、ゲーム内のすべてのプレーヤーの位置を取得する必要があります

しかし、メインスクリプトに入力した値は返されません。私はこれを正しくやっていますか?これはアプリの作成に適したアプローチですか?

4

2 に答える 2

4

あなたのアプローチは良いです、いくつかの点:

コンストラクターを使用すると、作業が楽になります。

class Player {

    protected $name;
    
    public function __construct($name) {
        $this->name = $name;
    }

    public function addAttr($name) {
        $this->name = $name;
    }
}

その後

new Player("Lionel Messi");

コンストラクターは、空の名前を持つプレーヤー/チームを取得しないことも保証します! クラスの内容をより適切に制御できます。

静的コードと通常のコードを混在させないでください

getOpponentsPosition 関数が正しくありません

public function getOpponetsPosition() {
    GAME::getOpponetPlayersPosition();
}

実際には、ここにさえあるべきではありませんTeam。他のチームのポジションを取得するのは の仕事ではありません。それはゲームのポジションです。両方が含まれているためです。

私があなたの目標をどのように達成したかについては、この要点を参照してください。

于 2012-05-11T20:41:08.683 に答える
3

いいえ、静的関数を呼び出しているGAME::getOpponetPlayersPosition();ため、$thisその関数内では定義されていません。

于 2012-05-11T20:36:31.493 に答える