PHP - 如何访问由数组创建的对象

时间:2015-12-12 00:24:16

标签: php class oop object

我很擅长使用OOP并想创建一个简单的卡片游戏。 我得到了以下代码:

class card{

  private $suit;
  private $rank;

  public function __construct($suit, $rank){
      $this->suit = $suit;
      $this->rank = $rank;
  }

  public function test(){
      echo $this->suit.' '.$this->rank;
  }
}

class deck{

  private $suits = array('clubs',   'diamonds', 'hearts', 'spades');
  private $ranks = array(2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A');

  public function create_deck(){
     $cards = array();
     foreach($this->suits as $suit) {
        foreach ($this->ranks as $rank) {
           $cards[] = new card($suit, $rank);
        }
     }
     print_r($cards);
  } 
 }

比如说,我的班级卡有处理卡的功能。 我如何处理心中之王?已经创建但我不知道如何访问它。

2 个答案:

答案 0 :(得分:1)

处理卡的功能应该在deck类,而不是card类。它会是这样的:

public function deal_card() {
    $suit = $this->suits[array_rand($this->suits, 1)];
    $rank = $this->ranks[array_rand($this->ranks, 1)];
    return new card($suit, $rank);
}

请注意,这里没有处理哪些卡片的记忆。 deck类可能应该有private $cards属性,其中包含所有卡的数组(您可以使用类似于create_deck函数的循环在构造函数中填充它)。然后当你处理一张卡片时,你可以从这个阵列中删除它:

public function deal_card() {
    if (count($this->cards) > 0) {
        $index = array_rand($this->cards, 1); // pick a random card index
        $card = $this->cards[$index]; // get the card there
        array_splice($this->cards, $index, 1); // Remove it from the deck
        return $card;
    } else {
        // Deck is empty, nothing to deal
        return false;
    }
}

答案 1 :(得分:0)

实例化一个这样的对象:

$card = new card('hearts', 'K');