簡體   English   中英

在PHP中訪問另一個受保護的類的變量

[英]access another class protected variable in PHP

我用php寫了一個足球經理模擬器,[困難的算法!]

我有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()函數獲取游戲中所有玩家的位置

但是它不返回我在主腳本中輸入的值。 我這樣做對嗎? 這是應用程序即時寫作的好方法嗎?

您的方法很好,有幾點:

使用構造函數,它們可以使您的生活更輕松:

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的工作,而是游戲的工作,因為它包含了兩者。

請參閱此要點,以了解我如何實現您的目標。

不,您正在調用靜態函數GAME::getOpponetPlayersPosition(); 因此該函數中的$this未定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM