1

次のコードに基本的な問題があります。

<?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 の挿入メソッドは、UserInterface オブジェクトを想定しています。だから私はそれを作成します:

<?php

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

?>

私の問題は、ユーザーの ID が、オブジェクトの挿入後にデータベースから取得される自動インクリメント値であることです。しかし、オブジェクトは ID なしでは完全ではないため、オブジェクトのコンストラクターによって ID を定義する必要があります。その一般的な問題を解決するにはどうすればよいですか?

私の理解では、オブジェクトはIDを持たないと不完全になるため、IDを2番目のパラメーターとしてデフォルト値を持つコンストラクターに渡すことはオプションではありません。

ご協力いただきありがとうございます。

4

1 に答える 1

1

あなたは渡すことができますnull

$user = new User(null, "Chris");

$_id は有効な整数かどうかチェックされずnull、このモデルにはまだ有効な ID がないことがわかっています。

于 2013-03-30T11:01:23.560 に答える