为什么 WC_Product::get_id() 不等于 WC_Product::$id,而代码暗示它必须等于?



给定$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是一个好习惯,不应该直接访问属性。

相关内容

  • 没有找到相关文章

最新更新