我有PHP类,它包含来自数据库的查询数据的函数。第一个是
class x{
public $var1;
public $var2;
function __construct(){ }
function getX($primkey){
$sql = mysql_qyery("SELECT * FROM x_table WHERE primkey='$primkey'");
$row = mysq;_fetch_assoc($sql);
$this->var1 = $row['var1'];
$this->var2 = $row['var2'];
}
}
另一个是
class x{
public $var1;
public $var2;
function __construct(){ }
function getX($primkey){
$sql = mysql_qyery("SELECT * FROM x_table WHERE primkey='$primkey'");
$row = mysq;_fetch_assoc($sql);
return $row;
}
}
两个类在函数getX()上有一些区别。第一个类将数据从数据库放入类变量,但第二个类通过数组从数据库返回整个数据。
我想知道两个班级的表现,哪一个更好。哪一个对编程或任何想法都有好处?
问候。
答案 0 :(得分:0)
使用第一个表单,您可以灵活地执行其他转换和非对称映射。因此,从这个意义上说,您真正创建了一个Model类,它可以对您的实际数据源进行抽象表示。
使用第二种形式,如果您遵循Convention Over Configuration(CoC)范例并明确定义您的约定,它可能会起作用。但是,在线下,你可能会遇到你必须做出例外的情况。我建议采用上述更灵活的方法,作为对未来例外情况的预期。
切向:如果您不是纯粹出于教育目的而编写自己的对象映射,或者出于其他一些合理的原因,您是否看过RedBeanPHP或其他替代方案?
答案 1 :(得分:0)
class x{
public $row;
function __construct(){ }
function getX($primkey){
$sql = mysql_qyery("SELECT * FROM x_table WHERE primkey='$primkey'");
this->$row = mysq;_fetch_assoc($sql);
}
}
我的建议是这样的。您已正确整合封装,并且其动态适应未来的要求。
也许你也可以添加getter功能。
答案 2 :(得分:0)
我会创建一个数据库适配器,然后创建一个数据映射器并使用一个使用数据映射器的模型。
在这种情况下,调用$ model-> find()会调用对象find方法,该方法调用Data Mapper查找方法向数据库适配器发出查询。