【问题标题】:Is using functions a good practice? [closed]使用函数是一种好习惯吗? [关闭]
【发布时间】:2015-02-18 10:03:43
【问题描述】:

我有一个 Handler.php 来管理来自多个页面的用户输入帖子。

在我的 Handler.php 的几个部分中,我需要执行 same 查询。

现在我在 Handler.php 的不同部分重复了相同的代码。

调用函数然后返回结果会更好吗?

我知道它会起作用,但是,由于我真的很业余,我希望得到专家的建议。

【问题讨论】:

  • 你能和我们分享一些代码,或者稍微解释一下你的问题吗?
  • 一般的经验法则是 DRY(不要重复自己)....换句话说,如果您在几个不同的地方有相同的代码块,那么就让它成为一个函数跨度>
  • 代码不应该重复,除非你有充分的理由
  • @BenoîtLatinier 不应该成为重复您的代码的充分理由。想不出一个不被可维护性打败的理由。除了你只是在尝试超快的东西,然后用“普通”代码写下来。
  • @WesselvanderLinden 我的问题与特定代码没有直接关系,而是与代码概念有关。我可以看到人们不喜欢它(downvotes),但对我来说了解 DRY 很重要(Mark Ba​​ker 和 Benoit Latinier)。谢谢!

标签: php return


【解决方案1】:

在需要执行相同代码的多个位置调用函数总是更好!

它更具可读性和可维护性,因为您需要对函数进行的每项更改都只能在函数中完成,而不是在整个代码中重复代码的 N 个位置上完成。

重复代码是一种非常糟糕的做法,您应该始终尝试以一种您在项目中只需要一次代码的方式来规划和构建您的代码。

另外,最好将数据库的所有操作都放在一个类中。这样您就可以很快找到与数据库一起使用的代码。

想象一下:

//DataHandler.php

/* ... some code ... */

mysqli_query($dbCon, "SELECT * FROM someTable WHERE X = Y");

/* ... some other code ... */

mysqli_query($dbCon, "SELECT * FROM someTable WHERE X = Y");

/* ... much more code ... */

mysqli_query($dbCon, "SELECT * FROM someTable WHERE X = Y");

现在您需要更改查询中的某些内容

//DataHandler.php

/* ... some code ... */

mysqli_query($dbCon, "SELECT * FROM someTable WHERE Y = X");

/* ... some other code ... */

mysqli_query($dbCon, "SELECT * FROM someTable WHERE Y = X");

/* ... much more code ... */

mysqli_query($dbCon, "SELECT * FROM someTable WHERE X = Y");

哎呀您错过了在一个位置进行更改,现在您的系统中出现了一个可能非常大的错误,您会在搜索此错误时流泪。

所以这样做会更好:

//DataHandler.php

/* ... some code ... */

$data = selectSomething($someDataYouNeedToCheck);

/* ... some other code ... */

$data = selectSomething($someDataYouNeedToCheck);

/* ... much more code ... */

$data = selectSomething($someDataYouNeedToCheck);

function selectSomething($y){
    mysqli_query($dbCon, "SELECT * FROM someTable WHERE X = ".$y);
    // return the result after working with it
}

现在您只需要更改函数内的代码,就不会错过项目中的任何部分!您遇到了单点故障。您知道错误发生在哪里,因为只有可能发生错误的地方!

【讨论】:

  • 为这个很棒的答案点赞,说明为什么必须封装功能!
  • @khormeHoly 谢谢,非常清楚。
猜你喜欢
  • 2013-03-30
  • 2016-03-20
  • 1970-01-01
  • 2021-03-15
  • 2017-04-28
  • 1970-01-01
  • 2020-04-24
  • 2020-08-25
  • 2014-04-01
相关资源
最近更新 更多