PHP ORM如何在构造函数中设置id


PHP ORM how to set id in constructor

我有一个基本的问题与以下代码:

<?php
interface UserInterface
{
    public function getId();
    public function getName();
}
class User implements UserInterface
{
    private $_id;
    private $_name;
    public function __construct($id, $name)
    {
        $this->_id = $id;
        $this->_name = $name;
    }
    public function getId()
    {
        return $this->_id;
    }
    public function getName()
    {
        return $this->_name;
    }
}
class UserMapper
{
    public function insert(UserInterface $user)
    {
        ... insertion code
    }
}
?>

UserMapper的insert方法需要UserInterface对象。所以我创建了一个:

<?php
$user = new User(1, "Chris");
$userMapper = new UserMapper();
$userMapper->insert($user);
?>

我的问题是,用户的id是插入对象后来自数据库的自动增量值。但是对象的构造函数强迫我定义一个id,因为没有id对象是不完整的。如何解决这个普遍问题?

将id作为第二个参数传递给具有默认值的构造函数是不可能的,因为在我的理解中,没有id的对象是不完整的。

谢谢你的帮助。

您可以通过null:

$user = new User(null, "Chris");
没有检查

$_id是否为有效的整数,并且对于null,您知道该模型还没有有效的ID。