如何在函数中合并重复的代码?

时间:2015-08-06 12:13:50

标签: php function oop while-loop dry

我尝试创建一个类来合并以下函数但是我不完全理解这个方法,我将如何处理以下函数以消除在每次调用单独的echo块时查询DB的需要?

function get_pages_new() {
$cxn    = mysqli_connect('localhost', 'root', '', 'northern') or die(mysqli_error($cxn));
$query = ("SELECT * FROM `pages` ORDER BY `page_id` ASC") or die(mysqli_error($cxn));
$getnews = mysqli_query($cxn, $query);

while ($row = mysqli_fetch_assoc($getnews)) {
    $page_id        = $row['page_id'];
    $page_title     = $row['page_title'];
    $admin          = $row['admin_only'];

    echo "<li><a href="."add_page.php?page_id=".$page_id.">$page_title</li></a>";
}
};

function get_pages_edit() {
$cxn    = mysqli_connect('localhost', 'root', '', 'northern') or die(mysqli_error($cxn));
$query = ("SELECT * FROM `pages` ORDER BY `page_id` ASC") or die(mysqli_error($cxn));
$getnews = mysqli_query($cxn, $query);

while ($row = mysqli_fetch_assoc($getnews)) {
    $page_id        = $row['page_id'];
    $page_title     = $row['page_title'];
    $admin          = $row['admin_only'];

    echo "<li><a href="."edit_page.php?page_id=".$page_id.">$page_title</li>   </a>";
}
};

function get_pages_delete() {
$cxn    = mysqli_connect('localhost', 'root', '', 'northern') or die(mysqli_error($cxn));
$query = ("SELECT * FROM `pages` ORDER BY `page_id` ASC") or die(mysqli_error($cxn));
$getnews = mysqli_query($cxn, $query);

while ($row = mysqli_fetch_assoc($getnews)) {
    $page_id        = $row['page_id'];
    $page_title     = $row['page_title'];
    $admin          = $row['admin_only'];

    echo "<li><a href="."delete_page.php?page_id=".$page_id.">$page_title</li></a>";
}
};

由于

2 个答案:

答案 0 :(得分:2)

传入包含链接的参数:

    function get_pages($link) {
           $cxn    = mysqli_connect('localhost', 'root', '', 'northern') or  die(mysqli_error($cxn));
           $query = ("SELECT * FROM `pages` ORDER BY `page_id` ASC") or die(mysqli_error($cxn));
           $getnews = mysqli_query($cxn, $query);

           while ($row = mysqli_fetch_assoc($getnews)) {
                 $page_id        = $row['page_id'];
                 $page_title     = $row['page_title'];
                 $admin          = $row['admin_only'];

                 echo "<li><a href='".$link."?page_id=".$page_id."'>".$page_title."</li></a>";
            }
    };

其中$ link是add_page.php,edit_page.php或remove_page.php。除非我误读了你的代码并且每个函数都在运行一个单独的查询,否则这应该有效:)

答案 1 :(得分:1)

$为其创建一个方法而不是类:

function extractIdTitleAdminFromEntry($entry) {
  return [
    'page_id'    => $entry['page_id'],
    'page_title' => $entry['page_title'],
    'admin_only' => $entry['admin_only'],
  ];
}

现在你可以在你的while循环中执行此操作:

list($page_id, $page_title, $admin_only) = extractIdTitleAdminFromEntry($row);

您甚至可以修改它,使属性列表是动态的:

function extractIdTitleAdminFromEntry($entry, $properties) {
  $values = [$key];
  foreach ($properties as $key) {
    $values[$key] = isset($entry[$key] ? $entry[$key] : null;
  }
  return $values;
}

list($page_id, $page_title, $admin_only) = extractIdTitleAdminFromEntry(
  $row, 
  ['page_id', 'page_title', 'admin_only']
);