【问题标题】:How should I use functions and / or combine some code here?我应该如何在这里使用函数和/或组合一些代码?
【发布时间】:2012-08-28 07:01:10
【问题描述】:

我扩展了一些带有分页和对列进行排序的表格。到目前为止一切正常,但我最多可以在 10 页上使用相同的代码,所以我考虑使用函数,但我不确定为每个部分使用函数是否合理(性能等)或如果我应该结合几件事,所以我需要一些建议..

目前一页的代码是这样的(每个数字都可以是一个函数):

$limit = 30;

1.

$sql = 'SELECT
            COUNT(`news_id`)
        FROM
            `news`';

$stmt = $db->prepare($sql);
$stmt->execute();
$stmt->bind_result($count);
$stmt->fetch();
$stmt->free_result();
$stmt->close()

2.

if ($count === 0)
{
    $max_pages = 1;
}
else
{
    $max_pages = (int)ceil($count/$limit);
}

3.

if (isset($_GET['page']))
{
    if (preg_match('/^[0-9]{1,}$/', $_GET['page'])
    && ($_GET['page'] > 1
    && $_GET['page'] <= $max_pages))
    {
        $current_page = (int)$_GET['page'];
        $offset = ($current_page - 1) * $limit;
    }
    else
    {
        header('location: http://' .SERVERNAME. '/admin/news/');
        exit;
    }
}
else
{
    $current_page = 1;
    $offset = 0;
}

4.

$valid_sort = array('id', 'date', 'title');

if (isset($_GET['sort']))
{
    if(in_array($_GET['sort'], $valid_sort))
    {
        $sort = $_GET['sort'];
    }
    else
    {
        header('location: http://' .SERVERNAME. '/admin/news/');
        exit;
    }
}
else
{
    $sort = 'id';
}

5.

$valid_order = array('asc', 'desc');

if (isset($_GET['order']))
{
    if(in_array($_GET['order'], $valid_order))
    {
        $current_order = $_GET['order'];
    }
    else
    {
        header('location: http://' .SERVERNAME. '/admin/news/');
        exit;
    }
}
else
{
    $current_order = 'desc';
}

由于 4 和 5 几乎相同,我可以在这里调用具有不同参数的相同函数,但我仍然不确定调用最多 5 个函数是否真的有意义..

最后我需要以下变量:$limit, $count, $max_pages, $current_page, $offset, $sort, $current_order

编辑:为了清楚起见,问题不在于函数如何工作,或者是否可以在这里使用它们。问题是,一个函数应该与我的想做什么?例如,我可以编写一个具有 120 行和 8 个参数的函数,但我只需要调用 1 个函数/页面......或者我可以保持简短(1 个函数用于 1 个目的/变量),但我需要调用更多功能/页面..

【问题讨论】:

    标签: php performance function


    【解决方案1】:

    长话短说。 是的。

    这很简单。如果可以将某些内容放入函数中并使其可重用,那就去做吧!它将组织您的代码,您可以更轻松地重用它。否则,您将不得不在之后重写代码以将其放入函数中。所以,是的,如果有必要,这样做并让每个文件都可以访问它。

    另外,如果可能,请尝试从函数开始以完全理解它们,如果可以,请从 OOP 开始!它会让你的生活变得更轻松。我希望这会有所帮助。

    我不会重写您的代码,我认为如果您自己编写代码,这对您自己来说是一种很好的做法。如果这很难并且您自己无法完成,请随时询问 SO :)

    • 编辑: 关于你所说的性能,不用担心。一个函数可能比复制粘贴慢 0.00000000001 纳秒。但是,如果您将可读性和编程考虑在内,请使用函数。如果您不关心代码的外观,并且想要花 5 天时间进行简单的调整,请不要使用函数;)

    【讨论】:

    • 感谢您的回复!无需重写我的代码,我可以自己做到这一点:) 使用函数对我来说并不是全新的,但如果对每个数字真正使用函数是有意义的,我宁愿需要一些建议(#2 确实几乎什么都没有,所以我猜在这里调用一个函数是多余的)。另一方面,我不喜欢返回一个数组并使用list() 获取值,因为这可能会使函数变得庞大且过于复杂。 .
    • 很简单,如果你打算重复使用粘贴的代码,把它放在一个函数中,这样重复使用会更容易。尝试尽可能动态地构建它,这样你就可以通过在函数调用中设置一些参数来改变整个事情。
    • 我刚刚编辑了我的问题,以表明我知道如何使用函数重用代码,但问题是,在这种情况下它应该有多复杂 :)
    • 嗯,在这种情况下,我会考虑你认为未来会是什么样子。有时只允许 1 个参数作为数组更容易,它可以包含多个要循环的参数,这是 1 个选项。您还可以允许 8 个不同的参数,但这意味着您必须将除您需要的参数之外的所有参数设置为“null”。所以,考虑一下未来:你认为你的应用程序在未来会是什么样子?会长多大? (你永远无法预测,但应该在编码时给你很好的指导)。
    • 这正是我需要一些建议的地方;)我的第一个“感觉”是为一个目的使用一个功能。这将提供最大的可重用性,因为我可以单独使用每个函数(如果需要的话),而更复杂的函数仅限于它的编写目的(除非我会使用多个 if 语句,但我真的想要调用一个 200 行函数,其中 80% 是不必要的?)...但是看看 #2.. 为单个 if..else 语句调用一个函数?还是在另一个函数中调用该函数?
    猜你喜欢
    • 1970-01-01
    • 2014-02-27
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    相关资源
    最近更新 更多