0

ここにphpn00b:

デッキからカードを1枚選びます。

クラスインスタンスは「$test_1」であり、関数「pick_card」はそのクラスのメソッドです。

1)欲しいカード、2)デッキ、1枚少ないカードを返す関数が欲しいのですが。

どこが間違っているのですか?

$card, $deck = $test_1->pick_card($play_deck);

public function pick_card(&$deck)
{
    $card = $deck[0];
    echo "picked this card: " . $card . "<br />";
    array_splice($deck,0,0);
    return $card; $deck;
}
4

4 に答える 4

3

PHPではそのような2つの変数を返すことはできません。参照によって関数に渡されていることに注意してください。その$deckため、その変数に加えた変更は、関数がその変数を操作するときにその変数に反映されます。

そうは言っても、これはクラスなので、変数を渡す必要はまったくなく、デッキを格納するプロパティが必要です。私はこのようなものを提案します:

class card_deck {
    protected $deck = NULL;

    public function __construct() {
        // some logic to create, shuffle, and set deck array to $this->deck
    }

    public function pick_card() {
        if($this->get_card_count() < 1) {
            throw new Exception('The deck is empty.');
        }
        return array_shift($this->deck);
    }

    public function get_card_count() {
        return count($this->deck);
    }
}
于 2013-02-19T22:24:04.033 に答える
2

配列として返す必要があります。連想配列を使用することも、リストを使用して配列を次のような変数に分割することもできます。

list($card, $deck) = $test_1->pick_card($play_deck);

public function pick_card(&$deck)
{
    $card = $deck[0];
    echo "picked this card: " . $card . "<br />";
    array_splice($deck,0,0);
    return array($card, $deck);
}
于 2013-02-19T22:26:59.827 に答える
1

あなたはあなたも使うことができるオブジェクトを持っているので$this

class card_deck {
  public $card;
  public $deck;
  public function pick_card(&$deck) {
    $this->card = $deck[0];
    $this->deck = $deck;
    echo "picked this card: " . $this->card . "<br />";
    array_splice($this->deck,0,0);
  }
}

$test_1 = new card_deck();
//set $play_deck 
$test_1->pick_card($play_deck);

// now use
$test_1->card;
$test_1->deck;
于 2013-02-19T22:28:53.303 に答える
0

連想配列で必要な値を返すことができます。関数で使用deck[0]する配列については、よく知っていると思います。pick_card

class Foo{
    public function pick_card(&$deck){
        $card = $deck[0];
        echo "picked this card: " . $card . "<br />";
        array_splice($deck,0,0);
        return array('card'=>$card,'deck'=>$deck);
    }
}
$test_1 = new Foo;
$deck = $test_1->pick_card($play_deck);
echo 'Card: '.$deck['card'].'<br>';
echo 'Deck: '.$deck['deck'];
于 2013-02-19T22:23:09.757 に答える