我们如何更改此 PHP 函数以使用 PHP 8?

How can we change this PHP function to work with PHP 8?

谁知道我们如何重写以下函数以与 PHP 8 兼容和工作?

function wpsc_have_shipping_quote() {

    $has_quote = false;

    global $wpsc_cart;

    if ( $wpsc_cart->shipping_quote_count > 0 || count( $wpsc_cart->shipping_quotes ) > 0 ) {
        $has_quote = true;
    }

    return $has_quote;
}

安迪。亲切的问候。

在 PHP 8.+ 中,count() 不再接受空值,如果我没记错的话,它从 PHP 7.2 开始就已经发出警告。因此,代码恰恰在这里失败了:

count( $wpsc_cart->shipping_quotes ) > 0

因为在某些情况下 $wpsc_cart->shipping_quotes 可能为空(未设置)。

您可以使用新的PHP 8 空合并来检查值是否为空,如果为空,您可以提供一个空数组[]。所以更改行:

if ( $wpsc_cart->shipping_quote_count > 0 || count( $wpsc_cart->shipping_quotes ) > 0 ) {

收件人:

if ( $wpsc_cart->shipping_quote_count > 0 || count( $wpsc_cart->shipping_quotes ?? [] ) > 0 ) {

您不必为了查看数组中是否包含任何内容而对数组进行计数。当您使用 || 时,被比较的值将是 converted to booleans,而 shipping_quotes 将评估为 false,无论它是空数组还是 null

function wpsc_have_shipping_quote() {    

    global $wpsc_cart;

    return $wpsc_cart->shipping_quote_count || $wpsc_cart->shipping_quotes;
}

这应该适用于任何 PHP 版本。