【问题标题】:sizeof(): Parameter must be an array or an object that implements Countablesizeof():参数必须是数组或者实现了Countable的对象
【发布时间】:2018-09-05 10:57:03
【问题描述】:

请帮帮我

报错sizeof():参数必须是数组或者实现了Countable的对象

ErrorException {#654 ▼
  #message: "sizeof(): Parameter must be an array or an object that implements Countable"
  #code: 0
  #file: "C:\Primer_Proyecto\Ventas\vendor\paypal\rest-api-sdk-php\lib\PayPal\Common\PayPalModel.php"
  #line: 179
  #severity: E_WARNING
  trace: {▼
    C:\Primer_Proyecto\Ventas\vendor\paypal\rest-api-sdk-php\lib\PayPal\Common\PayPalModel.php:179 {▶}
    Illuminate\Foundation\Bootstrap\HandleExceptions->handleError() {}
    C:\Primer_Proyecto\Ventas\vendor\paypal\rest-api-sdk-php\lib\PayPal\Common\PayPalModel.php:179 {▶}
    C:\Primer_Proyecto\Ventas\vendor\paypal\rest-api-sdk-php\lib\PayPal\Common\PayPalModel.php:281 {▶}
    C:\Primer_Proyecto\Ventas\vendor\paypal\rest-api-sdk-php\lib\PayPal\Common\PayPalModel.php:296 {▶}
    C:\Primer_Proyecto\Ventas\vendor\paypal\rest-api-sdk-php\lib\PayPal\Api\Payment.php:557 {▶}
    C:\Primer_Proyecto\Ventas\app\paypal.php:26 {▼
      › try{\r
      › \t$payment->create($this->_apiContext);\r
      › }\r
      arguments: {▶}
    }

这是 paypal.php 代码


public function generate(){
    $payment = \PaypalPayment::payment()->setIntent("sale")
        ->setPayer($this->payer())
        ->setTransactions([$this->transaction()])
        ->setRedirectURLs($this->redirectURLs());

    try {
        $payment->create($this->_apiContext);
    }
    catch(\Exception $ex){
        dd($ex);
        exit(1);
    }

    return $payment;
}


public function __construct($shopping_cart){
    $this->_apiContext = \PaypalPayment::ApiContext($this->_ClientId, $this  ->_ClientSecrete);
    $config = config("paypal_payment");
    $flatConfig = array_dot($config);
    $this->_apiContext->setConfig($flatConfig);
    $this->shopping_cart = $shopping_cart;
}

我没有看到错误,我一直在寻找我的错误是什么

【问题讨论】:

  • $this->_apiContext 似乎不包含您认为的内容。所以使用 var_dump 做一个调试输出来检查。

标签: php html laravel laravel-5 paypal


【解决方案1】:

错误在您使用的paypal\rest-api-sdk-php 包中。您使用的软件包版本显然与 PHP 7.2 不完全兼容。

您遇到的具体错误已在最新版本的软件包 (1.13.0) 中得到修复。将软件包更新到最新版本,此问题将得到修复。不过,我不能说可能会出现什么其他问题。

1.12.0 版本中,失败的具体行是:

} elseif (sizeof($v) <= 0 && is_array($v)) {

在 PHP 7.2 中,如果 $v 不是可数的,sizeof() 调用将发出警告,Laravel 会将警告变成异常。

1.13.0 版本中,他们将条件更新为

} elseif (is_array($v) && sizeof($v) <= 0) {

现在,sizeof() 只会在 $v 是一个数组时被调用,因此保证是可数的,从而消除了警告。

【讨论】:

  • 我的天啊,我已经尝试了好几个小时...我当前的版本是:PHP 7.2.7-1+ubuntu17.10.1+deb.sury.org+1 (cli) (built: Jun 22 2018 08:45:20) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.2.7-1+ubuntu17.10.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies with Xdebug v2.6.0, Copyright (c) 2002-2018, by Derick Rethans --- 我怎么知道它是 1.13.0 还是 1.12.0?我试过apt-get update/upgrade 并没有以任何方式影响php
  • @RickSanchez 指定的1.13.0 vs 1.12.0 版本是指作曲家安装的paypal\rest-api-sdk-php 包的版本。这不是在谈论系统级包。如果您想确切知道您正在使用的该软件包的版本,您需要查看您的composer.lock 文件。如果您需要更多帮助,我建议您提出问题。
  • php 7.3 还有一个is_countable() 可以用来在计数之前测试变量php.net/manual/en/function.is-countable.php
猜你喜欢
  • 2019-06-02
  • 2020-12-06
  • 2020-05-28
  • 2019-10-04
  • 2019-07-23
  • 2018-06-28
  • 2019-01-27
  • 2019-08-03
  • 2018-06-08
相关资源
最近更新 更多