私はトランプを扱うためのいくつかのクラスを構築しています。私は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変数を適切に初期化していません。私はどのようにしてオブジェクトを取得できますか?