2011-02-19 19 views
1

我正在建立一些与扑克牌一起工作的课程。我有一个卡类和一个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语言的非对象:\瓦帕\ WWW \ cardgames \的index.php第6行

看起来,似乎如果array_shift()没有返回对卡对象的引用,或者我没有正确初始化array_shift()返回的$ card变量。我如何获得我想要的对象?

回答

1

在构造函数中,您将堆栈存储在局部变量中。使用$this->stack将其存储在成员变量中。

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

Deck::__construct(),使用$this->stack[] = ..代替$stack[] = ..