【问题标题】:Any reason why someone would use printf() for pretty much everything?为什么有人会使用 printf() 做几乎所有事情?
【发布时间】:2012-01-08 07:47:11
【问题描述】:

我正在从一个现有的程序员那里接手一个项目,老实说,他把项目留在了一大堆无法维护、不可读的混乱中(编辑/澄清:几十个独立的 .php由 php/html/css 组成的页面都引用了一个巨大的 1500 行“functions.php”文件,ack)

话虽如此,似乎几乎到处都有变量、数组等,他使用了 printf()。

例如,不要使用:

foreach($thing as $t) {
    echo "<option value='".$t."'>".$t."</option>";
}

他会使用类似的东西:

foreach($thing as $t) {
     printf("<option value='%s'>%s</option>", $t, $t);
}

有没有人知道他为什么要这样做?使用 printf() 代替 echo/print 是否有一些我不知道的未知好处?

请注意,这不仅适用于可能需要验证/清理的值,还适用于所有内容。从数据库中提取的数据、在其他地方定义的随机变量和数组,绝对一切都是 printf() 而不仅仅是 echo 或 print,我试图弄清楚他为什么会使用这种方法,因为它可能有助于我理解逻辑在他建造的一些东西背后。

【问题讨论】:

  • 也许在某些时候覆盖输出翻译?
  • 说得好,但在这个项目中根本没有翻译任何东西......一种语言从头到尾。
  • 几周前与一位脾气暴躁的老 C 程序员交谈时,我很高兴得知他在所有事情上都使用 printf,即使他涉足 PHP。莫非你的前任是其他语言出身,没有完全学过PHP?
  • 它可能会更整洁,因为您可以立即发现变量。此外,您无需担心转义深度嵌套的数组键。最后,您可以使用未解析的字符串 ('') 而不是解析的字符串 ("") 以获得额外的性能,或者至少是控制。
  • 我已编辑您的代码以进行更多票价比较。您的原始代码示例似乎暗示printf 明显更长且更复杂,而实际上您使用printf 版本生成了更复杂的输出。现在他们做同样的事情,你可以看到线条的视觉复杂度几乎没有差异,可能更小。

标签: php mysql validation variables printf


【解决方案1】:

“使用 printf() 优先于 echo 或 print() 的唯一原因是,如果您将使用带有附加参数的格式字符串占位符功能(每个此类占位符一个)。如果不是,那么print() 会更快,并且 echo 甚至(非常轻微)更快,因为它不会生成返回值。”

在这里找到:echo VS printf

【讨论】:

  • 有趣的阅读...自从开始这个项目以来,我一直在对 sprintf/printf 进行一些挖掘,因为它不是我以前见过的使用理由......对我有任何好处很快就被乱七八糟的符号外观所取代,它给出了经常使用它的页面 - 这让我开始怀疑这个人是否知道我不知道的事情。
【解决方案2】:

我想他这样做是为了代码可读性。我认为使用 printf/sprintf 比 将变量直接嵌入到字符串中并交替使用'"""''""''"

个人认为这是最易读的方法:

<?php foreach($thing as $t): ?>
     <option value="<?php echo $t ?>"><?php echo $t ?></option>
<?php endforeach; ?>

它具有在大多数 IDE 中看起来不错的额外好处

【讨论】:

  • 100% 同意。我从来没有真正喜欢过以 php 代码结尾的所有点 (.) 连接。但后来我来自 pascal / c 背景。
  • 我同意这在将 PHP 直接嵌入到 html 时更加简洁。我开始认为这可能是纯粹的可读性 - 无论如何对他来说。
  • 我不是特别喜欢多个&lt;?php echo $t; ?&gt; 部分,但由于每个服务器未知的短标签选项,这是一个必要的邪恶。幸运的是,在 PHP 5.4 中,无论是否启用了短标签 &lt;? ?&gt;,都可以使用 &lt;?= $t ?&gt; echo 简写。然后我们就可以放心地使用清洁器&lt;?= ?&gt; 了。
  • 呃。如何将一个简单的%s 扩展为一个巨大的&lt;?php echo $t ?&gt; 上下文切换更具可读性?该行上的额外标点符号使得几乎不可能一眼就知道发生了什么。
  • @meagar 我认为这归结为一致性 - 我认为 作为更长连接字符串的 printf 方法,我需要弄清楚哪个变量属于哪个 %s。但同样,正如我认为这篇文章向我展示的那样,它确实开始归结为个人对行可读性的偏好。
【解决方案3】:

好吧,我肯定会在您的示例中使用printf。在输出具有大量属性或复杂属性的html元素时,我经常使用printfsprintfstrtr。它只是更具可读性,并且以后更容易换出值。

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 2021-08-11
    • 2021-12-20
    • 2021-04-14
    相关资源
    最近更新 更多