Как вернуть объект с помощью array_shift () в PHP? - PullRequest
1 голос
/ 19 февраля 2011

Я строю несколько классов для работы с игральными картами. У меня есть класс карты и класс колоды. Я хочу реализовать рисование карты из колоды, используя array_shift () для массива объектов Card; этот массив является собственностью Deck. Вот код для классов, который хранится в файле "cardlib.php":

<?php
class Card
{
 private $suit="";
 private $face="";

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

 public function getSuit(){
    return $suit;
 }

 public function getFace(){
    return $face;
 }

 public function display(){
    echo $this->suit.$this->face;
 }

}


class Deck
{
 private $suits=array("S","H","C","D");
 private $faces=array("2","3","4","5",
            "6","7","8","9","10",
            "J","Q","K","A");
 private $stack=array();

 function __construct(){
    foreach ($this->suits as $suit){
        foreach ($this->faces as $face){
            $card = new Card($suit,$face);
            $stack[] = $card;
        }
    }

 }

 public function doShuffle(){
    shuffle($this->stack);
 }

 public function draw(){
    $card = array_shift($this->stack);
    var_dump($card);
    return $card;
 }

}

?>

А вот код теста в "index.php":

<?php
include_once "cardlib.php";
$myDeck=new Deck();
$myDeck->doshuffle();
$card=$myDeck->draw();
$card->display();

?>

Тестовый код выдает мне следующее сообщение об ошибке:

NULL Неустранимая ошибка: вызов функции-члена display () для необъекта в C: \ wamp \ www \ cardgames \ index.php в строке 6

Кажется, что array_shift () не возвращает ссылку на объект карты, или я неправильно инициализирую переменную $ card тем, что возвращает array_shift (). Как мне получить объект, который я хочу?

Ответы [ 2 ]

1 голос
/ 19 февраля 2011

В Deck::__construct(), используйте $this->stack[] = .. вместо $stack[] = ..

1 голос
/ 19 февраля 2011

В конструкторе вы храните стек в локальной переменной.Используйте $this->stack, чтобы сохранить его в переменной-члене.

function __construct(){
   foreach ($this->suits as $suit){
       foreach ($this->faces as $face){
           $card = new Card($suit,$face);
           $this->stack[] = $card;
       }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...