#php #arrays #json
#php #массивы #json
Вопрос:
Это объект woocommerce, который называется $_product
Когда я var_dump
это получаю:
object(WC_Product_Variation)#4358 (13) {
["post_type":protected]=>
string(17) "product_variation"
["parent_data":protected]=>
array(16) {
["title"]=>
string(7) "Antares"
["status"]=>
string(7) "publish"
["sku"]=>
string(0) ""
Когда echo $_product->post_type;
я получаю product_variation
, как и ожидалось, но я не могу получить доступ к значению статуса!
var_dump($_product->parent_data);
мне ничего не дает (пустой)
Почему?
Ответ №1:
Вы не можете получить доступ protected
к свойствам за пределами экземпляра объекта или его родительских экземпляров. См. Видимость свойств на php.net для получения дополнительной информации.
Итак, почему можно получить доступ к $post_type
, даже если это protected
? Ну, кто-то был достаточно «умен», чтобы определить исключение из правила в этом волшебном методе получения — https://woocommerce.github.io/code-reference/files/woocommerce-includes-legacy-abstract-wc-legacy-product.html#source-view.68
Это плохая практика, и ее не следует использовать.
Вместо этого вы можете создать свой собственный класс, который расширяет WC_Product_Variation
и определяет свои собственные общедоступные методы получения getPostType()
и getParentData()
. Только не забудьте создать экземпляр MyWC_Product_Variation
вместо WC_Product_Variation
, когда вы хотите использовать методы получения.
class MyWC_Product_Variation extends WC_Product_Variation
{
public function getPostType(): string
{
return $this->post_type;
}
public function getParentData(): array
{
return $this->parent_data;
}
}