2016-11-09 3 views
1

numberOfDecksメソッドに問題があります。私は、私のコンストラクタで作成されたカードの配列を呼び出そうとしますが、未定義の変数($ cards)を渡している間にエラーが発生し続けます。グローバル変数である$ cardsはnumberOfDecksメソッドに呼び出すことができるので、私は考えました。クラス内のメソッドとクラス内のグローバル変数の呼び出しを理解するのに問題があります

<?php 
/* creating a deck of cards class to be used in a blackJack game*/ 

class Deck{ 

    public $cards = array(); 

    //creates an instance of a deck of cards (works) 

    public function __construct(){ 
    $values =array('2','3','4','5','6','7','8','9','10','J','Q','K','A'); 
    $suits =array('Diamond','Club','Heart','Spade'); 
     foreach ($suits as $suit) { 
     foreach($values as $value){ 
      $this->cards[] = "$value of $suit's"; 
     } 
     } 
    } 

    /*trying to add more decks to increase number of total cards 
    in my array (does not work)*/ 

    public function numberOfDecks($number){ 

    $this->cards = $cards; 
    $this->number= $number; 
    for($i = 0 ; $i < $number; $i++){ 
      array_push($cards[],$i); 
    } 
    return $cards; 

    } 
} 



$deck = new Deck();//works as expected 
$deck->numberOfDecks(3);//trouble 
$shuffled = shuffle($deck->cards);//works as expected 
var_dump($deck); 
+0

が、これはbasiclly彼らは同じプログラムですが、あなたはしたくない場合は、それは完全に別の問題であり、どのようにあなたの最後の質問 –

+0

@Dagonのデュープです私の質問を是非見てください。 – watkins1179

答えて

1

あなたはそれを宣言していないので、あなたの変数$cardsは未定義です。

public function numberOfDecks($number){ 

$this->cards = $cards; 

おそらく割り当ての方向を反転することを意味します。

$cards = $this->cards; 

オブジェクト総デッキにデッキを追加するためのあなたのコメントを考えると、割り当て方向を反転した後に、この出力でarray_merge

Here's a working fiddle.

<?php 

class Deck{ 

    public $cards = array(); 

    //creates an instance of a deck of cards (works) 

    public function __construct(){ 
    $values =array('2','3','4','5','6','7','8','9','10','J','Q','K','A'); 
    $suits =array('Diamond','Club','Heart','Spade'); 
     foreach ($suits as $suit) { 
     foreach($values as $value){ 
      $this->cards[] = "$value of $suit's"; 
     } 
     } 
    } 

    public function numberOfDecks($number){ 

     $cards = $this->cards; 

     $this->number = $number; 
     for($i = 0 ; $i < $number; $i++){ 
      $this->cards = array_merge($this->cards, $cards); 
     } 

    } 
} 



$deck = new Deck();//works as expected 

// how many cards are intially constructed? 
echo "count of cards in new deck: " . count($deck->cards) . "\n<br/>\n"; 

// add 3 more decks of cards 
$deck->numberOfDecks(3);//trouble 
echo "count of cards after adding 3 decks: " . count($deck->cards); 

// $shuffled = shuffle($deck->cards);//works as expected 
// var_dump($deck); 

結果を使用してみてください。

新しいデッキのカード数:52 つのデッキを追加した後、カードの 数:208

+0

私はarray_pushとarray_mergeの機能を試しても問題は残っていますが、まだ複数のデッキを追加するのに問題があります。 – watkins1179

+0

私はまだ全体的にカードを増やすことに問題がありますデッキ私はarray_mergeとarray_pushを試してみましたが、両方とも失敗しました – watkins1179

+0

@ watkins1179私は[完全な例を示す](https://3v4l.org/h3Sv5)に私の答えを更新しました。私はそれが助けて欲しい –

関連する問題