1

我写了一个长脚本,它完全符合我的需要,但现在我发现了函数的用处,所以我可以在其他脚本中使用它们。

我的脚本完全按照我最初编写的方式运行,并且也与我实现我创建的函数的方式完美运行。

由于我是编写函数的新手,而且我从未见过有人按照我的方式实现,我不知道它是否是好的形式。

原始方式

foreach($get_prefixes as $prefix) {
    if($prefix['type'] == 'pre') {
        $sql  = "SHOW COLUMNS FROM `$prefix[table]` LIKE 'sku_%' ";
        $sku_cols = $objDb->query($sql);
        foreach($sku_cols as $col) {
            echo $col['Field'] . '<br>';
        }
    }
}

然后是我使用创建函数的方式。它再次完美运行,但有没有“正确”的方法来做到这一点?

function getSku_($table) {
    global $objDb;
    $sql  = "SHOW COLUMNS FROM `$table` LIKE 'sku_%' ";
    $sku_cols = $objDb->query($sql);
    return $sku_cols;
}

foreach($get_prefixes as $prefix) {
    if($prefix['type'] == 'pre') {
        foreach(getSku_($prefix['table']) as $col) {
            echo $col['Field'] . '<br>';
        }
    }
}
4

6 回答 6

5

我看不出这个函数有什么问题,除了它的naming. 这并没有错,只是我理解它的约定是遵循命名为abc_pqror abcPqror _abcPqr (for private functions)

编辑:在 foreach 中使用之前,我也没有$get_prefixes在任何地方看到定义。它来自哪里?

foreach($get_prefixes as $prefix) { //This line

如果函数仅在查询中有所不同,"sku"那么"sku "您甚至不需要两个函数,只需OR在查询中使用(首选)或两个查询,如果您希望两个结果集是分开的。

于 2012-10-19T13:56:58.197 回答
4

欢迎来到开明的人群!您朝着正确方向迈出的第一步非常重要!

您的功能是正确的,并且按照应写的方式编写。

愿力量与您同在,朝着可重用、干净和模块化的编码迈进!(希望更多的人能够认识到这些事情的重要性。)

于 2012-10-19T13:57:41.920 回答
3

你的代码很好,除了一些命名奇怪,但你是新的,所以这是可以理解的。您可能还想看看像array_walk这样的东西,以减少您拥有的两个 foreach() 调用。

于 2012-10-19T14:01:17.083 回答
3

它看起来不错,但作为一个需要考虑的问题,'$get__prefixes' 可以为 NULL 吗?如果是这样,请考虑在“foreach”之前使用“if()”检查该可能性,例如:

if ($get_prefixes != NULL) {
    foreach($get_prefixes as $prefix) { 
        ....
    }
}

这可以防止潜在的错误。

于 2012-10-19T14:02:23.900 回答
3

没有什么问题。您已经分离出从数据库中获取信息的功能,并通过函数在代码中使用它。对我来说似乎很好。通过这种方式,您可以从代码中的任何位置调用该函数,而不仅限于在循环中使用它。

编辑:我同意前面的回答,函数名中的下划线是不必要的。

于 2012-10-19T13:57:29.440 回答
3

我会这样写:

// Add code here...
function getSku($table) {
    global $objDb;
    $sql = "SHOW COLUMNS FROM {$table} LIKE 'sku_%';"; // Here be changes
    $sku_cols = $objDb->query($sql);  
    return $sku_cols;
}

为什么?您的原始版本不适合这样的直接数据库访问: getSku("schema.table"); 所以我删除了你的 ` 包装器并附上了字符串。现在只需像这样喂包装器:

getSku('`table`'); // or
getSku('`schema`.`table`'); // or
getSku('table'); // or
getSku('schema.table');

它具有更普遍的用途,这就是功能的用途。

于 2012-10-19T14:06:36.380 回答