User
プライベート メンバー変数と getter/setter 関数のみで呼び出されるクラスを作成します
class User {
private $m_id;
private $m_firstname;
private $m_lastname;
public function get_firstname() { return $this->m_firstnmae; }
public function set_firstname($firstname) { $this->m_firstname = $firstname; }
...
}
だからprint_r($user)
私に次のようなものを与えるでしょう:
User Object
(
[m_id:User:private] => 2725
[m_firstname:User:private] => Alan
[m_lastname:User:private] => Turing
)
現在、PDO を使用してオブジェクトをデータベースに挿入しています (問題の一部ではなく機能しているため、接続部分はスキップします)。ここで、データを挿入する私の関数:
function insert($user)
{
$insert_query = "insert into table (id,firstname,lastname) values (:id, :firstname, :lastname)";
try
{
$stmt = $this->m_pdo->prepare($insert_query);
$stmt->bindParam(':id', $user->get_id());
$stmt->bindParam(':firstname', $user->get_firstname());
$stmt->bindParam(':lastname', $user->get_lastname());
$stmt->execute();
return true;
}
catch (PDOException $ex)
{
echo $this->m_error_message = $ex->getMessage();
return false;
}
}
同様に動作します。ただし、php error_reporting を に変更するとE_ALL | E_STRICT
、ランタイムの厳密な警告も表示され、挿入コードによって行の警告strict standards only variables should be passed by reference
が生成されbindParam
ます。Googleに尋ねたところ、明らかに2つのステップでこれを行う必要があることがわかりました。
$id = $user->get_id()
$stmt->bindParam(':id', $id);
それらを新しい形式に変換した後、すべてが警告なしで機能します。
問題は、私のオリジナルUser-class
は20を超えるプライベートメンバー変数ではるかに大きく、このような他のクラスも持っているということです. だから私は変数を繰り返し処理し、それらを配列に保存し、bindParam
それらを配列として保存することを考えていました。しかし、その後foreach
、パブリック変数のみをループし、プライベート変数をループしないという問題に直面します...だから私の質問は次のとおりです。
bindParam
どういうわけかループと組み合わせることができますか?- もしそうなら、どうすればプライベートメンバー変数をループして保存できますか?
便宜上、どこでも同じ命名形式を使用しています。つまり、 with データベースの列には、withおよびas getter/setterfirstname
に対応するものがありますm_firstname
User-class
get_firstname()
set_firstname($firstname)