Почему WC_Product::get_id() не равен WC_Product::$id, в то время как код подразумевает, что это должно быть так?

#php #wordpress #woocommerce

Вопрос:

Учитывая $product , что это экземпляр WC_Product_Variation, этот код:

 $product_id_1 = $product->id;
$product_id_2 = $product->get_id();

var_dump($product_id_1, $product_id_2);
 

…будет выводить разные значения, в моем случае:

 int(12465)
int(12466)
 

Почему бы это было так, если определение get_id() функции является:

 public function get_id() {
    return $this->id;
}
 

Ответ №1:

Если вы используете $product->id; ,вы не будете считывать идентификатор свойства из объекта, потому что он защищен. Он вызывает метод Magic __get для обратной совместимости, определенный в WC_Abstract_Legacy_Product. И тогда происходит следующее:

 $value = $this->is_type( 'variation' ) ? $this->get_parent_id() : $this->get_id();
 

В случае «вариации» он извлекает «parent_id».

Хорошей практикой является использование сеттера и геттера, к свойствам не следует обращаться напрямую.