我目前正在开发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
}
}
?>
答案 0 :(得分:0)
创建一个名为loadUser(或您喜欢的东西)的方法,如果传递给构造函数的数据数组具有ID,则使用loadUser方法加载详细信息。如果没有,您可以插入用户。在此之后,您可以继续编辑用户。