WooCommerce에 대한 배송 플러그인을 작성 중이며 보호 된 키 ([key : protected])의 값을 얻으려고하면 빈 값을 반환합니다. 배열이나 객체에서 보호 된 키의 값을 어떻게 얻습니까?
특히, woocommerce_shipping_init의 calculate_shipping 함수에서 $ package를 전달합니다. $ package는 일부 개체도 포함하는 배열이며 일부 개체 키는 보호됩니다. 따라서 $ package는 다음과 같습니다 (간단한 버전입니다).
Array
(
[contents] => Array
(
[abc123] => Array
(
[quantity] => 1
[data] => WC_Product_Simple Object
(
[object_type:protected] => product
[data:protected] => Array
(
[name] => Carnal Seed CD and Study Guide - Oil Merchant Series
[slug] => carnal-seed-cd-and-study-guide-oil-merchant-series
)
)
)
)
)
따라서 [name] 또는 [slug]를 얻으려고 할 때 [data : protected] 개체에 대해 빈 값을 다시 얻습니다 (따라서 [name] 및 [slug]가 존재하지 않음). 예를 들면 :
$data = $package['contents']['abc123']['data']->data; // $data returns empty
그렇다면 배열이나 객체에서 보호 된 키의 값을 어떻게 얻습니까?
보호 된 속성은 개인 속성과 마찬가지로 개체의 내부 컨텍스트 외부에서 액세스 할 수 없습니다. 그러나 보호 속성과 개인 속성을 구별하는 것은 확장 개체가 부모의 보호 속성을 볼 수 있지만 개인 속성 은 볼 수 없다는 것입니다.
어떤 이유로 든 보호 된 속성에 직접 액세스해야하는 경우 대상 개체를 확장하고 getter 메서드를 제공합니다.
class MyExtendingClass extends WC_Product_Simple {
public function getData() {
return $this->data;
}
}
즉, 클래스 WC_Product_Simple
는 이미 get_data()
메서드 를 노출하는 부모 개체를 확장해야합니다 . 이것은 당신이 찾고있는 것일 수 있습니다. 이 경우 대신 다음을 실행하십시오.
$data = $package['contents']['abc123']['data']->get_data();
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다