将PHP函数嵌套在PHP函数中的PHP函数中。糟糕的做法?

时间:2012-04-19 02:21:45

标签: php function nested

是否存在建议不要做以下事情的原则:

mysql_real_escape_string(trim(str_replace($var, "black", "<body text='%body%'>")));

如果这样的事情应该是禁止的,那么这是可以接受的吗?

$var = trim($var);
$var = str_replace($var, "black", "<body text='%body%'>");
$var = mysql_real_escape_string($var);

或者也是那种不好的做法,就像我上面所做的那样,对一个单一的变量进行调用和执行?做得更好:

$var1 = trim($var);
$var2 = str_replace($var1, "black", "<body text='%body%'>");
$var3 = mysql_real_escape_string($var2);

我一直想知道这个!

5 个答案:

答案 0 :(得分:4)

我认为通常的做法是像第一个例子那样“嵌套”函数。

有几个原因,但主要是它表明一切都按照特定顺序发生在同一个对象上,中间没有任何内容。

话虽如此,如果您不确切知道自己将要做什么,您可能需要从第二个示例开始,这样您就可以轻松返回并添加函数。

基本上,第一个是首选,更常见(我认为)最终,第二个是有利于测试和开发,第三个只是浪费资源(授予它很小,但没有必要)。

答案 1 :(得分:4)

嵌套功能很好 - 只要考虑到可读性。在这个相当简单的例子中,需要将大量精力投入到解析语句中:

mysql_real_escape_string(trim(str_replace($var, "black", "<body text='%body%'>")));

如果您决定使用嵌套函数,还可以使用智能缩进来更容易地查看正在发生的事情:

mysql_real_escape_string(
  trim(
    str_replace(
       $var, 
       "black", 
       "<body text='%body%'>"
)));
  • 每个函数参数都在它自己的缩进行上(trimstr_replace都被用作函数参数,$var"black"和{{1}也是如此})
  • 结尾"<body text='%body%'>"清楚地界定了函数嵌套结束的位置。它还提供快速语法校验和(计算开括号的数量,并确保它们与te末端的括号括起来)。

答案 2 :(得分:2)

在我看来,使代码简单易读也有很长的路要走。当我必须像你的第一个例子那样阅读代码时,我真的不喜欢它。通常是某人试图表明他们能做出多么复杂的事情。

我认为你拥有它的方式比第一个例子更好。

答案 3 :(得分:2)

你所有的例子都很好;它们之间并没有太大区别。如果你想让你的第一个例子更具可读性,你可以缩进它:

mysql_real_escape_string(
  trim(
    str_replace($var, "black", "<body text='%body%'>")));

将部分结果分配给临时变量,就像在第二个和第三个示例中一样,也很好。但是,如果给变量赋予有意义的名称可能会更有用:

$trimmed = trim($text);
$html = str_replace($trimmed, "black", "<body text='%body%'>");
$sql = mysql_real_escape_string($html);

顺便说一句,你的第一个例子以不同的顺序调用函数。

答案 4 :(得分:1)

我同意sloopjohnB和Jon的不同方面。我相信第一个例子是完全有效的,通常是常见的做法。如果它是其他人要阅读和处理的代码,那么你可能会觉得通过这样做可以显示你的编码知识,但这是正常的做法,如果代码只是供你查看和处理,无论如何,如果对你感到舒服,请使用它。

就我个人而言,我更喜欢第二种选择。让您更清楚地了解正在发生的事情以及您正在执行的步骤。还为您提供了添加或更改功能的选项,在其正确的位置/顺序,更容易。如果你需要在第一个例子中添加一个功能,你可能很容易忘记一个支架或将功能或支架放在错误的位置,真的让你失望。