我有一个关于PHP类的问题.我正在尝试通过PHP从Mysql获取结果.我想知道最佳实践是在类中显示结果还是将结果存储并以html处理.
例如,在班级内部显示结果
class Schedule {
public $currentWeek;
function teamQuery($currentWeek){
$this->currentWeek=$currentWeek;
}
function getSchedule(){
$connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
if (!$connection) {
die("Database connection failed: " . mysql_error());
}
$db_select = mysql_select_db(DB_NAME,$connection);
if (!$db_select) {
die("Database selection failed: " . mysql_error());
}
$scheduleQuery=mysql_query("SELECT guest, home, time, winner, pickEnable FROM $this->currentWeek ORDER BY time", $connection);
if (!$scheduleQuery){
die("database has errors: ".mysql_error());
}
while($row=mysql_fetch_array($scheduleQuery, MYSQL_NUMS)){
//display the result..ex: echo $row['winner'];
}
mysql_close($scheduleQuery);
//no returns
}
}
或者将查询结果作为变量返回并在php中处理
class Schedule {
public $currentWeek;
function teamQuery($currentWeek){
$this->currentWeek=$currentWeek;
}
function getSchedule(){
$connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
if (!$connection) {
die("Database connection failed: " . mysql_error());
}
$db_select = mysql_select_db(DB_NAME,$connection);
if (!$db_select) {
die("Database selection failed: " . mysql_error());
}
$scheduleQuery=mysql_query("SELECT guest, home, time, winner, pickEnable FROM $this->currentWeek ORDER BY time", $connection);
if (!$scheduleQuery){
die("database has errors: ".mysql_error());
// create an array }
$ret = array();
while($row=mysql_fetch_array($scheduleQuery, MYSQL_NUMS)){
$ret[]=$row;
}
mysql_close($scheduleQuery);
return $ret; // and handle the return value in php
}
}
这里有两件事:
>我发现php中的返回变量有点复杂,因为它是二维数组.我不确定最佳做法是什么,想问一下专家的意见.
>每次创建新方法时,都必须重新创建$connection变量:请参见下文
$connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
如果(!$connection){
die(“数据库连接失败:”.mysql_error());
}
$db_select = mysql_select_db(DB_NAME,$connection);
if (!$db_select) {
die("Database selection failed: " . mysql_error());
}
对我来说似乎多余.我可以只执行一次,而不必在需要查询时调用它吗?我是php类的新手.希望你们能帮助我.谢谢.
解决方法:
我将此类视为“访问器”,因此它们仅查询数据库并返回结果.这样,任何调用它的PHP代码都可以使用它来完成自己喜欢的事情.这可能正在显示,或者可能是检查,也可能是更新.这是一个很好的设计,因为它将数据存储区与逻辑与显示区分开,这意味着您的代码将更加灵活.但是是的,它有点复杂.
关于每次重新创建连接.这可能是必需的,也可能不是必需的.根据您的设置,您可能可以创建连接池.为了使您现在更轻松,您可以将连接的创建抽象为自己的方法.这样,您只需要在开始时调用此方法即可获得连接句柄.这样可避免您到处都有许多相同代码的副本.
如果您不熟悉PHP类,建议您对面向对象的设计进行一些研究.这将使您了解为什么抽象一些函数会有所好处,以及为什么要返回结果而不是显示结果.
标签:php,class
来源: https://codeday.me/bug/20191210/2098742.html