PHP存储库模式-更新功能
基本上,我正在编写一个更新方法PHP存储库模式-更新功能,php,design-patterns,Php,Design Patterns,基本上,我正在编写一个更新方法 class Entity { public $a; public $b; } class EnitityRepository { public function update(int $id, Entity $entity){ $this->dao->update($id, $entity); } public function get(int $id){ //does a look-up and returns an obj
class Entity {
public $a;
public $b;
}
class EnitityRepository {
public function update(int $id, Entity $entity){
$this->dao->update($id, $entity);
}
public function get(int $id){
//does a look-up and returns an object of Entity
}
}
class Dao {
public function update(int $id, Entity $entity){
$sql = "Update ABC";
if(isset($entity->a) {
$sql .= "set a = :a";
}
if(isset($entity->b) {
$sql .= ", set b = :b";
}
$sql .= " WHERE id = :id";
}
}
现在,在我的dao中,我想在无法编写条件更新(只更新正在设置的值)时更新记录,因为您不知道对象上的属性是否已设置..并且您不能仅仅依靠empty
或检查null,如果您真的想将值设置为null
使用神奇的方法\uuuu get、\uu set、\uu isset
像这样重构实体
类会是反模式的吗
class Entity {
private $data = [];
private $properties = [
'a' => true,
'b' => true,
];
public function __set($name, $value) {
if (array_key_exists($name, $this->properties)) {
$this->data[$name] = $value;
} else {
//throw exception
}
}
public function __get($name) {
if (array_key_exists($name, $this->data)) {
return $this->data[$name];
}
return null;
}
public function __isset($name) {
return isset($this->data[$name]);
}
public function __unset($name) {
unset($this->data[$name]);
}
}
或者有没有比在Dao中传递数组而不是对象更好的方法 如果你真的需要这些神奇的方法,就使用它们吧。不确定你是否真的需要它们。但是你不能使用一个框架或者一些预先制作好的东西,比如Laravel吗?或者你需要从头开始,还是为了一个更大的系统?如果你真的需要神奇的方法,使用它们。不确定你是否真的需要它们。但是你不能使用一个框架或者一些预先制作好的东西,比如Laravel吗?或者你需要从头开始,还是为了一个更大的系统?