Php 使用基本CRUD函数扩展PDO的建议

Php 使用基本CRUD函数扩展PDO的建议,php,class,pdo,crud,extend,Php,Class,Pdo,Crud,Extend,就在最近,我开始自己重写一个以前按程序编写的网站,我选择PDO作为包装器,因为我也习惯了OOP的方式。我想要一些关于课程结构的建议 大多数情况下,所有内容都是由数据库驱动的,比如添加类别和子类别、产品品牌、产品、用户等。我认为每个类别都可以是一个类别,因为我需要对所有类别执行CRUD操作,所以我需要一种在MySql数据库中插入、更新和删除记录的通用方法。问题不在于代码,我想并且已经根据自己的需要编写了一些CRUD操作,真正的问题在于结构,以及如何正确分发和扩展这些类 现在我已经编写了3种不同的方

就在最近,我开始自己重写一个以前按程序编写的网站,我选择PDO作为包装器,因为我也习惯了OOP的方式。我想要一些关于课程结构的建议

大多数情况下,所有内容都是由数据库驱动的,比如添加类别和子类别、产品品牌、产品、用户等。我认为每个类别都可以是一个类别,因为我需要对所有类别执行CRUD操作,所以我需要一种在MySql数据库中插入、更新和删除记录的通用方法。问题不在于代码,我想并且已经根据自己的需要编写了一些CRUD操作,真正的问题在于结构,以及如何正确分发和扩展这些类

现在我已经编写了3种不同的方法:

一个名为“Operations”的类将由所有其他需要CRUD函数的类扩展,该类包含非常通用的属性,如$id、$atributes、$fields和$table,当然还有插入、更新和删除的通用方法。这样我就可以创建,比如说我的产品对象,它带有一些参数名称、类别、价格,并立即将产品->插入到数据库中,而无需向插入函数传递任何参数。此类中的CRUD函数不接受参数,它们取决于所创建对象的属性

与上面相同,但CRUD函数接受参数,我认为这使它们更通用,以防我只需要插入一些东西而不创建以前具有无用属性的对象

“Operations”类扩展了PDO,其工作方式类似于2,但现在可以在创建数据库连接时直接访问它们,而不依赖于其他对象

我倾向于第一种选择,因为我认为,在大多数情况下,它将满足我对这个网站所做的一切,同样,这个网站已经编码,但程序上,这是一个混乱的维护,所以基本上我需要重新做的事情,但OO

除了CMS或已经编码的包装器之外,这样做的目的是学习PDO并习惯OOP,哪种方法是最好的?不限于我提到的选项

这是我到目前为止设法编写的“Operations”类,我一直在做沙箱测试,比如,不介意西班牙语变量名。我们也欢迎对守则提出建议

类操作{ 私人数据库; 受保护的$id; 受保护的$atributos; 受保护的$tabla; 受保护的$campos; 公共功能uu构造$link{ $this->database=$link; } 公共函数插入器{ 如果!$this->verificarCamposNulos$this->atributos,$this->campos echo“Campos nulos”; 否则{ $this->prepararCampos; $placeholders=$this->generarPlaceholders; $stmt=$this->database->prepareINSERT到{$this->tabla}{$this->campos}值{$placeholders}; $valores=array_值$this->atributos; $stmt->execute$valores; $stmt=NULL; echo“Se ha insertado exitosamente”; } } 公共功能修正{ 如果!$this->verificarCamposNulos | |清空$this->id echo“Campos nulos”; 否则{ $this->prepararCampos'=?'; $stmt=$this->database->prepareUPDATE{$this->tabla}SET{$this->campos}其中id={$this->id}; $valores=array_值$this->atributos; $stmt->execute$valores; $stmt=NULL; 回音“sehamodificadoexitosamente”; } } 私有函数generarPlaceholders{ 对于$i=0;$iatributos;$i++ $qmarks[$i]='?'; 返回内爆“,”,$qmarks; } //根据给定的字段格式,检查要插入的值是否为空 专用功能验证CARCAMPOSNULOS{ $n_campos=explode',',$this->campos; $valores=array_值$this->atributos; foreach$n_campos作为$i=>$result{ 如果strstr$result,“@” 如果为空$valores[$i] 返回false; } 返回true; } //从每个字段中删除“@”,用于检查mysql中哪些字段不为空 私有函数preparacampos$sufijo=NULL{ $n_campos=explode',',$this->campos; foreach$n_campos作为$i=>$result $n_campos[$i]=str_replace'@',$result.$sufijo; $this->campos=内爆“,”,$n_campos; } }
这不是一个审查代码的网站。您可以看看现有的框架(如Yii)是如何处理这个问题的。Yii可以自动从数据库中提取表模式,而无需记录您有哪些字段,哪些字段可以为空,等等。