엄격한 기준:'의 선언은 '와 호환되어야 합니다.
방금 Woocommerce 2.0(Wordpress에)을 PHP 5.4에 설치했는데, 다음과 같습니다.
엄격한 기준:WC_Gateway_B 선언ACS::process_payment()는 D:\my\path\to\htdocs\wordpress\woocommerce\classes\gateways\bacs\class-wc-gateway-bacs의 WC_Payment::::::process_payment()와 호환되어야 합니다.php 온라인...
파일을 확인해보니WC_Payment_Gateway
방법이 없다process_payment()
(설정이 아닌) 이 문제를 해결하는 방법을 알아야 합니다.error_reporting()
).
PHP의 Strict Standards란 정확히 무엇입니까?
어떤 상황에서 그런 오류가 발생합니까?
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 매개 변수) -> 엄격한 오류) -> 엄격한 오류가 발생했습니다.
왜냐하면, 변경할 수 있는 매개 변수와 함께 사용할 수 있는 것 같습니다.
function process_payment() {}
로.
function process_payment($order_id) {}
(*) 저는 마지막 5분 동안만 woocommerce를 알고 있으니 제 말을 믿지 마세요.
PHP 매뉴얼에서 인용
PHP 5 에서는, 새로운 에러 레벨 E_STRICT 를 사용할 수 있습니다.PHP 5.4.0 이전에는 E_STRICT는 E_ALL에 포함되어 있지 않았기 때문에 PHP < 5.4.0에서 이러한 종류의 에러 레벨을 명시적으로 유효하게 할 필요가 있었습니다.개발 중에 E_STRICT를 활성화하면 몇 가지 이점이 있습니다.SECTRICT 메시지> 최적의 상호 운용성을 확보하고 코드 호환성을 전송하기 위한 제안을 제공합니다.이러한 메시지에는 non-static > 메서드를 스태틱하게 호출하거나 >에서 정의된 호환 클래스 정의에서 속성을 정의하거나 PHP 5.3 이전 버전에서는 사용되지 않는 일부 기능에서는 인스턴스화 시 참조에 의한 오브젝트 할당 등의 E_STRICT 에러가 발생합니다.
이 에러는, WC_Gateway_B 로부터 발생하고 있습니다.ACS::process_payment() 선언이 WC_Payment_Gateway::process_payment()와 다릅니다(파라미터의 양이 같지 않을 수 있습니다).WC_Payment_Gateway에 method process_payment가 없는 경우 부모클래스를 확인합니다.
또, STRICT 에러를 디세블로 하는 경우는, 다음과 같이 ^ E_STRICT 를 에러 리포트 설정에 추가합니다.
error_reporting(E_ALL ^ E_STRICT);
오류를 끄지 않고 OOP 형식을 유지하려면 다음을 수행할 수도 있습니다.
class A
{
public function foo() {
;
}
}
class B extends A
{
/*instead of :
public function foo($a, $b, $c) {*/
public function foo() {
list($a, $b, $c) = func_get_args();
// ...
}
}
부모 클래스 및 하위 클래스에서 동일한 기능을 사용하는 경우 the 요 지 하 우 가 개 you when 수 은 는 get 수 class and 개 one' the functionStrict Standards
error.에러입니다.
예
매니저:
public function getAtPosition($position)
{
foreach ($this->getList() as $obj)
{
if ($obj->getPosition() == $position)
return $obj;
}
return null;
}
MenuManager 확장 관리자:
public function getAtPosition($position, $parent)
{
foreach ($this->getList() as $m)
{
if ($m->getParent() == $parent && $m->getPosition() == $position)
return $m;
}
return null;
}
다음 예제에서는 오류가 발생합니다.
엄격한 기준:MenuManager 선언:: getAtPosition()은 Manager:: getAtPosition($position)과 호환되어야 합니다.
함수에는 같은 인수가 없기 때문에 사용하지 않더라도 이를 속여서 인수를 추가합시다!
매니저:
public function getAtPosition($position, $dummy = 0) // Dummy to avoid Strict standards errors
{
foreach ($this->getList() as $obj)
{
if ($obj->getPosition() == $position)
return $obj;
}
return null;
}
MenuManager 확장 관리자:
public function getAtPosition($position, $parent = 0)
{
foreach ($this->getList() as $m)
{
if ($m->getParent() == $parent && $m->getPosition() == $position)
return $m;
}
return null;
}
Only one to be careful is that when using 주의할 점은 사용 시getAtPosition()
부에서MenuManager.class.php
, 2 의 라 파 미 제 2 신 는 을주요 sending확ers be세 are have 2해것있 paramet, you개 to actually송 declare we sure인실고하로를터$parent = 0
부모 선언과 일치시키다부모의 선언과 일치하도록 하기 위해서입니다.
가 " " "를 확장합니다.Manager
「」를하지 .getAtPosition()
~의 합니다.Manager
.
자식 클래스에서 선언된 경우 php는 부모의 메서드 대신 자식 클래스의 메서드를 사용합니다.overloading
PHP를 사용하여 적절하게 구현될 때까지 작업을 수행했습니다.
여기 더 나은 답이 있습니다 - https://stackoverflow.com/a/9243127/2165415
를 들어, 「」라고 하는 것은,parentClass::customMethod($thing = false)
★★★★★★★★★★★★★★★★★」
childClass::customMethod($thing)
때'를 customMethod()
클래스의 경우 하위 메서드가 첫 번째 인수에 대한 기본값을 정의하지 않았기 때문에 오류가 트리거될 수 있습니다.
언급URL : https://stackoverflow.com/questions/17234259/strict-standards-declaration-of-should-be-compatible-with
'source' 카테고리의 다른 글
Lombok 1.18.0과 Jackson 2.9.6이 함께 작동하지 않음 (0) | 2023.03.20 |
---|---|
Form 7 문의 - 이메일 발송 시 커스텀 기능 추가 (0) | 2023.03.20 |
JSON.stringify가 RangeError를 슬로우합니다.거대한 개체의 문자열 길이가 잘못되었습니다. (0) | 2023.03.20 |
WP - 플러그인 디렉토리의 파일을 커스텀 페이지 템플릿으로 사용하시겠습니까? (0) | 2023.03.20 |
angularjs: 필터링된 데이터를 가져올 때 $filter가 정의되지 않았습니다. (0) | 2023.03.20 |