PHP OOP如何处理数据库查询返回的数据
我试图发挥自己的技能,摆脱程序风格编码,但切换并不容易,我对OOP概念非常陌生,请记住这一点阅读/回答时。PHP OOP如何处理数据库查询返回的数据
我有一个类里面下面的方法称为Jobs{}
方法的任务是非常简单的查询所有在表中不同的工作类别,并返回它的数据库。
下面是从代码我的类中提取
function dispCategories(){
$sql = "SELECT DISTINCT category FROM jobs";
$stmnt = $db->prepare($sql);
$stmnt->execute();
return $stmnt->fetchAll();
}
现在,在我的观点或HTML页面我下面
$obj = new Jobs();
$categories = $obj->dispCategories()
?>
<!--DISPLAY CATEGORIES -->
<form id="getJobByCategory" method="post" action="">
<select name="selectedCategory">
<?php
foreach ($categories as $category){
?>
<option value="<?php echo $category['category'] ?>">
<?php echo $category['category'] ?>
</option>
<?php
}
?>
我的问题
当你看我的代码,我发起对象Jobs{}
,并调用方法类别$categories = $obj->dispCategories()
我使用一个foreach
循环结合一些html & php。这是在OOP领域做事情的可接受方式吗?
- 我是否应该创建一个独立的方法,如
getCategories()
,其中我循环了dispCategories()
方法返回的结果? - 或者我应该只是处理由
dispCategories()
方法的实际dispCategories()
方法中返回的数据...
希望这是有意义的。只是在这里寻找一些最佳做法和指导,但请记住我是一个菜鸟。
我是否应该创建一个像getCategories()这样的分离方法,让我遍历dispCategories()方法返回的结果?
你绝对是在正确的轨道上与你现在拥有的。由于您的dispCategories()
方法仅返回一列,因此它将返回一维数组,这是一个简单的值列表,而不是保留生成它的SQL查询的特征的二维结构。我可能会修改该方法来获取所有行,然后将它们还原为单个数组,然后返回。这使得不需要创建另一个方法来循环由dispCategories()
返回的类别。
假设PHP 5.5+,你可以很容易地array_column()
做到这一点:
function dispCategories(){
$sql = "SELECT DISTINCT category FROM jobs";
$stmnt = $db->prepare($sql);
$stmnt->execute();
// Return a simple 1D array of the category only
return array_column('category', $stmnt->fetchAll());
}
它是那么简单的foreach
来一一列举出来,而无需访问数组的键。
foreach ($categories as $category){
?>
<option value="<?php echo $category; ?>">
<?php echo $category; ?>
</option>
<?php
}
请记住,您可能需要调用htmlspecialchars()
在$category
值,如果它可能包含要求HTML实体编码字符。
或者我应该只是处理由dispCategories()方法返回的实际dispCategories里面的数据()方法...
不,我不认为你应该这样做。在您学习OOP时,请阅读关注点的概念和MVC(模型 - 视图 - 控制器)模式。如果您要在创建此HTML块的Jobs
类中创建方法,那么它将执行更适合您的视图代码的工作。应该是Jobs
类的职责,从数据库中检索项目,提供关于它们的信息,并准备将它们传递给视图或模板,但视图或模板HTML应该保留负责组织来自Jobs
类进入标记适合但是你碰巧显示它。
非常感谢你这个详细的答案,真的很感激。 –
@TimothyCoetzee不客气,祝您学习愉快。 –