2011-02-19 5 views
1

私はトランプを扱うためのいくつかのクラスを構築しています。私はCardクラスとDeckクラスを持っています。私は、Cardオブジェクトの配列に対してarray_shift()を使ってデッキからカードを描画する実装をしたいと思います。この配列はDeckのプロパティです。ここでは、ファイル「cardlib.php」に格納されたクラスのためのコードは次のとおりです。PHPでarray_shift()を使ってオブジェクトを返すにはどうすればよいですか?

<?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 致命的なエラー:コードは私に次のエラーメッセージを与えるC非オブジェクト上)(メンバ関数表示に呼び出し:\ WAMP \ WWW \ cardgames \ 6

ラインにはindex.phpみたいだarray_shift()がカードオブジェクトへの参照を返していないか、array_shift()が返す値で$ card変数を適切に初期化していません。私はどのようにしてオブジェクトを取得できますか?

答えて

1

コンストラクタでは、スタックをローカル変数に格納します。メンバー変数に格納するには、$this->stackを使用します。 Deck::__construct()

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

は、$this->stack[] = ..代わりに$stack[] = ..

使用します
関連する問題