我不确定如何将部分代码移动到类中。
<?php
class InfoTest {
private $info_results;
public function __construct() {
$dbc = get_dbc();
$info = $dbc->query ("SELECT info_id, info_title FROM text");
if ($dbc->error) {
printf("Error: %s\n", $dbc->error);
}
while ($info_row = $info->fetch_array())
{
$info_results[]= $info_row;
}
$info->free();
$this->info_results = $info_results;
}
public function setInfo() {
$this->info_results = $info_results;
}
public function getInfo() {
return $this->info_results;
}
public function __destruct() {
}
}
?>
<?php
$display = new InfoTest();
foreach ($display->getInfo() as $info_row) {
?>
<!-- html -->
<?php echo $info_row['info_title']."</a><br />"; ?>
<!-- html -->
Sub-Info:
<?php
$dbc = get_dbc();
$si_title = $dbc->query ("SELECT info_title FROM text WHERE info_id = ".$info_row['info_id']."");
if ($dbc->error) {
printf("Error: %s\n", $dbc->error);
}
$num =$si_title->num_rows;
$count = 0;
while ($sub_info = $si_title->fetch_array())
{
$sub_info_title = $sub_info['info_title'];
if ($count!=$num-1)
{
echo $sub_info_title." , ";
$count++;
}
else echo $sub_info_title;
}
?>
<!-- html -->
<?php } ?>
我不确定如何将Sub-Info(Sub-Info :)之后的代码移动到一个类中。它与InfoTest属于同一类,它是一个属于自己的类,还是根本没有进入类中?
子信息代码:
<?php
$dbc = get_dbc();
$si_title = $dbc->query ("SELECT info_title FROM text WHERE info_id = ".$info_row['info_id']."");
if ($dbc->error) {
printf("Error: %s\n", $dbc->error);
}
$num =$si_title->num_rows;
$count = 0;
while ($sub_info = $si_title->fetch_array())
{
$sub_info_title = $sub_info['info_title'];
if ($count!=$num-1)
{
echo $sub_info_title." , ";
$count++;
}
else echo $sub_info_title;
}
?>
答案 0 :(得分:0)
在课堂上你已经掌握了所有信息。因此,sql-query的替代方法可能是另一种方法,它会在私有字段info_results
中搜索具有特殊ID的所有标题。 E.g:
public function getInfoTitles($info_id) {
$titles = array();
foreach ($this->info_results as $info_row) {
if ($info_row['info_id'] == $info_id)
$titles[] = $info_row['info_title'];
}
}
return $titles;
}
您的子信息代码是:
echo implode(', ', $display->getInfoTitles($info_row['info_id']));
答案 1 :(得分:0)
OOP的一般概念是将数据与处理该数据的方法耦合。因此,如果您觉得某些数据以相同的方式被多次处理,那么引入一个将填充该数据和逻辑的类是个好主意。
当然,它出现了很多其他问题:应该有多少个类,它们应该如何相互作用,哪个部分的业务逻辑应该进入哪个类等。没有普遍的,始终如一的答案这些问题,但开发了一些解决这些问题的一般方法:the design patterns。有一些关于这个主题的书籍,其中最着名的是Gang of of Four(GoF)Design Patterns。
这是关于这个主题的一般想法。在您的特定情况下,我建议您创建新的类ItemInfo
,因此InfoTest
类仅负责查询数据库并创建此新类的实例。
class InfoTest {
private $items;
public function __construct() {
$this->items = new Array();
}
private function queryItems($itemId){
$dbc = get_dbc();
$info = $dbc->query("SELECT info_id, info_title FROM text");
if ($dbc->error) {
printf("Error: %s\n", $dbc->error);
}
while ($info_row = $info->fetch_array())
{
$item = new ItemInfo($info_row);
$this->items[] = $item;
}
$info->free();
}
public function getItems($itemId){
if (empty($this->items)){
$this->queryItems($itemId);
}
return $this->items;
}
/* Other functions. */
public function __destruct() {
}
}
Class ItemInfo{
private $id, $title;
function __construct(Array $params){
$this->id = $params['item_id'];
$this->title = $params['item_title'];
}
function getTitle(){
return $this->title;
}
function toString(){
retirn "I'm item {$this->id}, my title is {$this->title}";
}
}
你的代码就像
一样简单$item_test = new ItemTest();
$items = $item_test->getItems($item_id);
$titles = array();
foreach ($items as $item){
//you may process your items in any way you need
$titles[] = $item->getTitle();
}
echo implode(',', $titles);