在 PHP 函数中的 PHP 函数中嵌套 PHP 函数.不良做法


Nesting PHP functions within PHP functions within PHP functions. Bad Practice?

有没有一个原则建议不要做这样的事情:

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);

我一直想知道这一点!

我认为

通常的做法是像第一个示例一样"嵌套"函数。

有几个原因,但大多数情况下,它表明一切都以特定的顺序发生在同一个对象上,中间没有任何事情发生。

话虽如此,如果您不知道要做什么,您可能希望从第二个示例开始,以便您可以轻松地返回并添加函数。

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

嵌套

函数很好 - 只要你考虑到可读性。在这个相当简单的示例中,需要投入大量的精力来解析语句:

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""<body text='%body%'>"也是如此)
  • 结尾)));清楚地界定了函数嵌套的结束位置。它还提供了一个快速的语法校验和(计算左括号的数量,并确保它们与末尾的右括号数量匹配)。
在我看来,

使代码变得简单和可读有很长的路要走。当我必须像您的第一个示例一样阅读代码时,我真的不喜欢它。通常是有人试图展示他们可以制造出多么复杂的东西。

我认为无论哪种方式,你都有它比第一个例子更好。

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

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);

顺便说一句,您的第一个示例以与其他示例不同的顺序调用函数。

我同意 sloopjohnB 和 Jon 的观点,但在不同的方面。 我相信第一个例子是完全有效的,通常是常见的做法。 如果它是其他人将要阅读和处理的代码,那么在某些人看来,您似乎试图通过这样做来展示您的编码能力,但这是正常的做法,如果代码只是供您查看和处理,那么无论如何,如果您觉得舒服,请使用它。

就我个人而言,我更喜欢第二种选择。 让您更清楚地了解正在发生的情况以及您正在执行的步骤。 还为您提供了在适当的位置/顺序中添加或更改功能的选项,变得更加容易。 如果您需要在第一个示例中添加一个函数,则很容易忘记括号或将函数或括号放在错误的位置,从而真正使您失望。