PHPでMVCのフレームワークを自作しています。
ModelをさらにQuery、Entityの2つの名前空間に分けて、QueryでSQLを発行してDBからデータ取得し、
取得したデータをEntityに格納するという流れにしています。
この流れでやろうとしたときに、Entityのフィールドのセッター、ゲッターを作ると、使用するテーブルのカラム数分のフィールドと、ゲッターが必要になっている状況ですごくコードが長くなります。
(以下の例はサンプルで書いたので少ないですが)
特に何か不都合があるわけではないのですが、カプセル化するときのつくりってこういうものなのでしょうか?
もし別のやり方があるならば、教えていただきたいです。
PHPなのでマジックメソッドの__set()や__get()を使用すればいいのかもしれませんが、今回は使わずにやろうと思います。
よろしくお願いいたします。
php
1namespace Model\Entity; 2 3class SampleEntity extends Entity { 4/** 5 * Entityクラスの各フィールドがDBのテーブルの各カラムに対応しています 6 */ 7 private $field1 = null; 8 private $field2 = null; 9 private $field3 = null; 10 11/** 12 * QueryでDBから取得したデータを各フィールドに格納します 13 */ 14 public function setValues($values = null) { 15 if (!is_array($values)) { 16 return; 17 } 18 19 if (array_key_exists('column_name1', $values)) { 20 $this->field1 = $values['column_name1']; 21 } 22 if (array_key_exists('column_name2', $values)) { 23 $this->field2 = $values['column_name2']; 24 } 25 if (array_key_exists('column_name3', $values)) { 26 $this->field3 = $values['column_name3']; 27 } 28 } 29 30/** 31 * 以下、各ゲッターです 32 */ 33 public function getField1() { 34 return $this->field1; 35 } 36 37 public function getField2() { 38 return $this->field2; 39 } 40 41 public function getField3() { 42 return $this->field3; 43 } 44}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/25 12:51
2019/07/25 13:04
2019/08/25 08:32