#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».
Хорошей практикой является использование сеттера и геттера, к свойствам не следует обращаться напрямую.