0) { $this->set_id($id); $this->read(); } } /** * 获取ID */ public function get_id() { return $this->id; } /** * 设置ID */ public function set_id($id) { $this->id = absint($id); } /** * 获取对象类型 */ public function get_object_type() { return $this->object_type; } /** * 获取数据 */ public function get_data() { return array_merge($this->data, array('id' => $this->get_id())); } /** * 获取变更 */ public function get_changes() { return $this->changes; } /** * 设置属性 */ protected function set_prop($prop, $value) { if (array_key_exists($prop, $this->data)) { if ($this->data[$prop] !== $value) { $this->changes[$prop] = $value; $this->data[$prop] = $value; } } } /** * 获取属性 */ protected function get_prop($prop, $context = 'view') { $value = null; if (array_key_exists($prop, $this->changes)) { $value = $this->changes[$prop]; } elseif (array_key_exists($prop, $this->data)) { $value = $this->data[$prop]; } if ('view' === $context) { $value = apply_filters($this->get_hook_prefix() . $prop, $value, $this); } return $value; } /** * 获取钩子前缀 */ protected function get_hook_prefix() { return 'yoone_' . $this->object_type . '_get_'; } /** * 获取元数据 */ public function get_meta($key = '', $single = true, $context = 'view') { if (!$this->get_id()) { return $single ? '' : array(); } return get_metadata($this->object_type, $this->get_id(), $key, $single); } /** * 设置元数据 */ public function set_meta($key, $value) { if (!$this->get_id()) { return false; } return update_metadata($this->object_type, $this->get_id(), $key, $value); } /** * 删除元数据 */ public function delete_meta($key) { if (!$this->get_id()) { return false; } return delete_metadata($this->object_type, $this->get_id(), $key); } /** * 应用变更 */ protected function apply_changes() { $this->data = array_replace_recursive($this->data, $this->changes); $this->changes = array(); } /** * 保存数据 */ public function save() { if (!$this->get_id()) { $this->create(); } else { $this->update(); } $this->apply_changes(); return $this->get_id(); } /** * 删除数据 */ public function delete($force_delete = false) { if (!$this->get_id()) { return false; } do_action('yoone_before_delete_' . $this->object_type, $this->get_id(), $this); $result = $this->delete_from_database($force_delete); if ($result) { $this->set_id(0); do_action('yoone_delete_' . $this->object_type, $this->get_id(), $this); } return $result; } /** * 抽象方法 - 从数据库读取 */ abstract protected function read(); /** * 抽象方法 - 创建记录 */ abstract protected function create(); /** * 抽象方法 - 更新记录 */ abstract protected function update(); /** * 抽象方法 - 从数据库删除 */ abstract protected function delete_from_database($force_delete = false); }