严格标准:声明 ' ' 应与 ' ' 兼容

2022-08-30 20:34:18

我刚刚在PHP 5.4上安装了woocommerce 2.0(在Wordpress上),我得到了这个:

严格标准:声明WC_Gateway_BACS::p rocess_payment() 应与 D:\my\path\to\htdocs\wordpress\plugins\woocommerce\classes\gateways\bacs\class-wc-gateway-bacs 中的 WC_Payment_Gateway::p rocess_payment() 兼容.php在线...

我检查了文件,发现没有方法。我需要知道如何解决这个问题(不是通过设置)。WC_Payment_Gatewayprocess_payment()error_reporting()

PHP中的严格标准到底是什么?
在什么情况下我们得到这个错误?


答案 1

WC_Payment_Gateway在 中定义并声明一个方法abstract-wc-payment-gateway.php

function process_payment() {}

而将其定义为WC_Gateway_BACS

function process_payment( $order_id ) { ...

(也许你把WC_Payment_Gateway和WC_Payment_Gateway混为一谈)。

因此,不同的签名(0 个参数与 1 个参数)->严格的错误。
由于它似乎*总是与一个参数一起使用,因此您可以更改

function process_payment() {}

function process_payment($order_id) {}

(*)请记住,我只知道自最后五分钟以来的woocommerce,所以不要相信我的话。


答案 2

引用自 PHP 手册

在 PHP 5 中,可以使用新的错误级别E_STRICT。在 PHP 5.4.0 之前,E_STRICT未>包含在E_ALL中,因此您必须在 >PHP < 5.4.0 中显式启用此类错误级别。在开发过程中启用E_STRICT有一些好处。STRICT 消息>提供有助于确保代码的最佳互操作性和转发>兼容性的建议。这些消息可能包括诸如静态调用非静态>方法,在兼容的类定义中定义属性,同时在>使用的特征中定义属性,并且在PHP 5.3之前,一些不推荐使用的功能会发出E_STRICT错误>例如在实例化时通过引用分配对象。

您收到此错误是因为WC_Gateway_BACS::p rocess_payment() 声明与 WC_Payment_Gateway::p rocess_payment() 不同(参数数量可能不同等)。如果WC_Payment_Gateway没有方法process_payment,请检查其父类:)

此外,如果要禁用 STRICT 错误,请将 ^ E_STRICT 添加到错误报告配置中,例如:

error_reporting(E_ALL ^ E_STRICT);

推荐