给定$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;
}
如果使用$product->id;
,则不会从对象中读取属性'id',因为它是受保护的。它调用Magic __get方法来实现向后兼容性,该方法在WC_Abstract_Legacy_Product中定义。然后发生以下情况:
$value = $this->is_type( 'variation' ) ? $this->get_parent_id() : $this->get_id();
在'variation'的情况下,它检索'parent_id'。
使用setter和getter是一个好习惯,不应该直接访问属性。