PHP模型结构 - 从数据库加载属性

时间:2013-10-01 16:44:02

标签: php database model load instance

我目前正在开发PHP脚本,我不确定以下内容的最佳做法是什么:

由于PHP不允许类(User)中的多个构造函数,我有一个构造函数,它有一个数组作为参数(对于id,name,address,请参阅下面的代码块)。

当此数组不包含id但是包含其他属性(例如name,address)时,它会调用类的insert方法并将插入行的id分配给类的id属性。 当包含id,name和address的数组传递给构造函数时,它会将这些值赋给相应的属性。

当我想在数据库中编辑用户时,我可以通过以下方式实现它:

  • 为构造函数添加一个选项,仅传递数组中的id (没有名称和地址属性,因为这些属性未知 在调用update方法时),而不是调用update方法 实例。这个问题是你有一个实例 不是真实对象的良好表示(如在数据库中)。 例如,您不能调用getName()方法,因为name不是 集。

  • 与上面相同,但现在只将id传递给构造函数, 从数据库加载其他属性,以便实例 数据库中对象的正确表示。然后是 可以在此实例上调用update方法。

  • 使更新方法保持静态,以便我可以调用更新方法
    没有制作实例

前两点的问题是,我在构造函数中得到了一些意大利面条代码,因为我必须检查构造函数中哪些属性传递给数组。

您认为哪种解决方案最佳选择?

你有更好的方法,不会在构造函数中产生大量的意大利面条代码吗?

<?php
class User
{
private $id;
private $name;
private $address;

public function __construct($data)
{
    $this->name = $data['name'];
    $this->address = $data['address'];

    if (isset($data['id'])) {
        $this->id = $data['id'];
    } else {
        $result = $this->insert();
        $this->id = $wpdb->insert_id; //Wordpress method for retrieving insert id
    }
}

public function get_id() { return $this->id; }
public function get_name() { return $this->name; }
public function get_address() { return $this->address; }

public function insert() { //insert into DB }
public function update($data) { //update in DB the $data attributes}
public function delete() { //delete from database }

public static function get_user_list()
{
    // load users from the database
    // foreach user {
    //      create User instance by passing the id, name and address values from the database in an array to the constructor of User
    //      add user instance to a result array
    // }
    // return result array
}
}

?>

1 个答案:

答案 0 :(得分:0)

创建一个名为loadUser(或您喜欢的东西)的方法,如果传递给构造函数的数据数组具有ID,则使用loadUser方法加载详细信息。如果没有,您可以插入用户。在此之后,您可以继续编辑用户。