【问题标题】:Trying to pass function parameters试图传递函数参数
【发布时间】:2011-02-22 01:54:19
【问题描述】:

我正在尝试从 elseif 语句中获取两行代码,并创建一个将参数返回给父函数的函数。这是一个简单的纸牌游戏,可以在我的 $Cards 数组中搜索三张。这是原始代码:

elseif(count($Cards) == 3) {
            $CardsNotOfValue = $this->_getCardsNotOfFaceValue($faceValue, $CardsGroupedByValues);
            list($Kicker1, $Kicker2) = $this->_getSortedCards($CardsNotOfValue);
            return new ThreeOfAKind(array_merge($Cards, array($Kicker1, $Kicker2)));
        }

到目前为止,我的代码如下所示:

function { if (count($Cards) == 3) {
            **LINE 36** $Kicker = $this->kickerCards($faceValue, $CardsGroupedByValues); }
**LINE 55** public function kickerCards(array $kickers)
{
    $CardsNotOfValue = $this->_getCardsNotOfFaceValue($faceValue, $CardsGroupedByValues);
    return $this->_getSortedCards($CardsNotOfValue);
}

当我尝试执行四种类型时,我收到以下错误(我试图突出显示上面有问题的行):

PHP 可捕获的致命错误:传递给 BestHandIdentifier::kickerCards() 的参数 1 必须是一个数组,给定整数,在第 36 行的 /home/dev/parameter2/BestHandIdentifier.php 中调用并在 /home/dev/parameter2 中定义/BestHandIdentifier.php 第 55 行

我在理解如何创建 ($faceValue, $CardsGroupedByValues) 并传递一个数组以供我的新函数进行评估时遇到了一些麻烦。一开始我是不是走错了方向?

【问题讨论】:

  • var $faceValue 中有什么?

标签: php arrays function parameters


【解决方案1】:

你的函数定义是:

public function kickerCards(array $kickers);

所以 $kickers 必须是一个数组... 您正在尝试使用以下方法调用该函数:

$this->kickerCards($faceValue, $CardsGroupedByValues);

传递两个参数,$faceValue 是一个整数,第二个参数是一个数组。

您的函数定义应如下所示:

public function kickerCards($faceValue, array $cards);

如果我可以进一步阐述,做一些假设。

我的假设:

  1. 该函数采用面值和当前持有的卡片数组
  2. 函数的返回值应该是该数组中与面值不匹配的卡片。
  3. Cards 是一个数组,带有一个值(也可能是花色)键。例如 $twoOfHearts = array('value'=>2,'suit'=>'hearts');

所以这是一个可能的实现

public function kickerCards($faceValue, array $cards) {
    $kickerCards = array();
    foreach($cards as $card) {
        if ($card['value'] != $faceValue)
            $kickerCards[] = $card;
    }
    return $kickerCards;
}

【讨论】:

  • 很清楚我是新手,但我真的很感谢您的帮助。所以如果我要理解关于数组和整数的函数,我必须定义我要传递这个数组?至于假设,几乎与前两个一致。 $faceValue 确实表示此时的面卡和 2-10,所以如果我要通过四个红心之王,脚本确实将其识别为一种类型的四个......暂时。我会尝试一下实现:)
  • 您不必定义您正在传递一个数组(在函数定义中使用数组将帮助您找到错误,就像它所做的那样),但函数定义参数需要匹配函数调用。在您的问题中,函数定义有一个参数,函数调用传递了两个参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 2016-03-14
  • 1970-01-01
  • 2021-08-22
  • 2013-01-27
  • 2021-04-13
  • 1970-01-01
相关资源
最近更新 更多