在PHP中从MySQL动态生成类属性有什么缺点?
抱歉,如果这个问题听起来令人困惑,可能还没有用最好的措辞,但这里有一个例子 假设我们有一个包含不同列的“sales”表,我们想用php创建一个sales类,我传统上是这样处理的在PHP中从MySQL动态生成类属性有什么缺点?,php,mysql,class,pdo,Php,Mysql,Class,Pdo,抱歉,如果这个问题听起来令人困惑,可能还没有用最好的措辞,但这里有一个例子 假设我们有一个包含不同列的“sales”表,我们想用php创建一个sales类,我传统上是这样处理的 class Sale { public $id; public $userID; public $customerID; public $sale_net; public $sale_vat; public $sale_gross; public $duratio
class Sale
{
public $id;
public $userID;
public $customerID;
public $sale_net;
public $sale_vat;
public $sale_gross;
public $duration;
public $sale_date;
public $end_date;
private $table = "sales";
private $pk = "id";
function __construct($saleID=NULL){
if($saleID!=NULL){
global $pdo;
$stm = $pdo->prepare("SELECT * FROM {$this->table} WHERE {$this->pk} = ?");
$stm->execute(array($saleID));
if($stm->rowCount() > 0)
{
$data = $stm->fetchObject();
$this->id = $saleID;
$this->userID = $data->userID;
$this->customerID = $data->customerID;
$this->sale_net = $data->sale_net;
$this->sale_vat = $data->sale_vat;
$this->sale_gross = $data->sale_gross;
$this->duration = $data->duration;
$this->sale_date = $data->sale_date;
$this->end_date = $data->end_date;
}
}
}
}
现在说到这里,以下方法的缺点是什么
class Sale
{
private $table = "sales";
private $pk = "id";
function __construct($saleID=NULL){
if($saleID!=NULL){
global $pdo;
$stm = $pdo->prepare("SELECT * FROM {$this->table} WHERE {$this->pk} = ?");
$stm->execute(array($saleID));
if($stm->rowCount() > 0)
{
$this->isValid = true;
$data = $stm->fetchAll();
$sale = $data[0];
foreach ($sale as $property => $value) {
$this->$property = $value;
}
}
}
}
我看到一个优点是,如果将列添加到sales表中,我可以立即访问它们,而无需修改类本身 对象不必镜像数据库表(无论如何,在ORM模型之外);例如,您可能希望将订单行作为
Sale
对象的一部分;这很有道理。。。但它们将位于与订单标题数据完全不同的表中。您的PHP对象应该具有应用程序的逻辑数据结构,而不是数据存储的基本方式。将所有类方法作为公共方法也违背了OOP的核心概念之一,我不认为第二种选择有任何缺点;结果相同,但代码比选项1少。不管是1还是2,我希望您永远不要计划重命名DB列。我同意@CD001,因为Sale
类似乎更适合作为底层数据的抽象层,而不是精确的镜像。即使您不知道数据的来源,也要努力使类可用。