2016-11-09 3 views
1

Ich habe Probleme mit meiner numberOfDecks-Methode. Ich versuche, das Kartenfeld aufzurufen, das in meinem Konstruktor erstellt wurde, aber es kommt immer wieder ein Fehler auf, dass ich eine undefinierte Variable ($ cards) übergebe. Ich dachte, da es eine globale Variable ist, könnten $ cards in der numberOfDecks Methode aufgerufen werden.Fehler beim Verständnis des Aufrufs globaler Variablen mit einer Klasse in einer Klasse innerhalb der Klasse

<?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

dies ist basiclly eine Betrogene Ihrer letzten Frage –

+0

@Dagon Wie so ist sie das gleiche Programm, aber es ist eine andere Frage vollständig und, wenn Sie wollen nicht Schauen Sie sich meine Fragen auf alle Fälle einfach entlang – watkins1179

Antwort

1

Ihre variable $cards ist nicht definiert, weil Sie es nicht erklären.

public function numberOfDecks($number){ 

$this->cards = $cards; 

Wahrscheinlich wollten Sie die Zuweisungsrichtung umdrehen.

$cards = $this->cards; 

für Ihren Kommentar Gegeben Decks zum Objekt Gesamt Deck hinzufügen, nachdem die Zuordnung Richtung Spiegeln, versuchen 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); 

Ergebnisse in dieser Ausgabe mit:

Anzahl der Karten im neuen Kartenstapel: 52
Anzahl der Karten, die nach Zugabe von 3 Decks: 208

+0

Ich habe immer noch Probleme mit der Zugabe von mehreren Decks Ich habe versucht, die array_push und die array_merge Funktionen und ich habe immer noch Probleme – watkins1179

+0

Ich habe immer noch Probleme mit dem Hinzufügen von mehr Karten zu den gesamten Deck Ich habe array_merge und array_push ausprobiert und beide sind gescheitert – watkins1179

+0

@ watkins1179 Ich habe meine Antwort auf [das vollständige Beispiel] (https://3v4l.org/h3Sv5) aktualisiert. Ich hoffe, es hilft. –

Verwandte Themen