PHP:它想要一个“对象”,所以我给它和对象,然后错误地说它想要一个“数组”,给什么?

时间:2018-11-27 17:31:22

标签: php arrays object

我很困惑。使用a PHP wrapper使用Cardano API(v1)。

createNewTransaction($source, $destination, $spendingPassword)函数需要数组形式的参数:

// source of funds (array)
    $source = array(
                'accountIndex'  => $wallet_idx,
                'walletId'      => $wallet_id
            );

    // destination for funds (array)
    $destination = array(
                'address' => $banker,
                'amount'  => $lovelace
            );

    // spending pass
    $spendingPassword = get_user_meta('1', 'spending_pass', true);

    // transaction
    $client->createNewTransaction($source, $destination, $spendingPassword);

因此,然后我从API返回了此错误:

  

Array([状态] =>错误[诊断] => Array(   [validationError] => $中的错误:解析构造函数付款时   Cardano.Wallet.API.V1.Types.Payment类型的预期对象,但得到了   数组。 )[message] => JSONValidationFailed)

然后,我想到了如何将数组变成对象的想法,这将解决我的问题。所以我这样做:

   $o_source = (object) $source;
   $o_destination = (object) $destination;

,然后将其发送回API,以查看交易是否能够通过,但出现另一个错误:

  

致命错误:未捕获的TypeError:参数1传递给   Cardano :: createNewTransaction()必须为数组类型object   给...

所以,现在我很困惑,我以为我最初是向它发送一个数组,但是后来它说它想要一个对象。我不明白!

请帮助!

1 个答案:

答案 0 :(得分:1)

The code from the linked library类似于:

public function createNewTransaction(
    array $source,
    array $destination,
    string $spendingPassword
): array {
    $groupPolicy = 'OptimizeForSecurity';
    return self::jsonDecode($this->post(
        '/api/v1/transactions' .
        '?source=' . $source .
        '?destination=' . $destination .
        '?groupingPolicy=' . $groupPolicy .
        '?spendingPassword=' . $spendingPassword
    ), true);
}

如果运行此代码,则$source$destination将从数组强制转换为字符串“ Array”。 API正是在抱怨这个问题,它可能期望字符串“ Array”以外的其他内容作为source参数的值。

我建议您寻找另一个库,或者自己实现API调用,因为该库没有机会在当前状态下正常工作。