43

我不明白这部分 php 的PSR-2约定:

行长的软限制必须是 120 个字符;自动样式检查器必须警告但不能在软限制处出错。

不应超过 80 个字符;超过这个长度的行应该分成多个后续行,每行不超过 80 个字符。

我认为“软限制”的意思是“尽量坚持这个限制,但额外的几个字符不是问题”。但是后来我读了第二行,现在我不明白。

4

5 回答 5

54

这很容易:

  • 0-80:总是好的
  • 80-120:可接受(如果有充分的理由,例如,包裹它的字符串会很难看)
  • 120+:Lint 工具、IDE 等必须显示警告(但绝不是错误!),因为该行可能很难看/不可读/...
于 2013-08-28T18:17:47.357 回答
8

PSR-2没有硬性限制

MUST (NOT)指的是自动样式检查器,而不是作为程序员的你。

另请注意no error超过软限制时应发出的部分。

于 2013-08-28T18:17:21.027 回答
2

让我在上面的答案中添加一些内容

编辑器设置

我也在阅读无花果标准,我偶然发现了同样的问题。

在深入了解我的 IDE 设置 (PhpStorm) 后,我在一般“代码样式”页面下方发现了一个小注释,您不会在 php 代码部分看到该注释。

笔记报告:

“指定一个指南 (80) 或多个 (80, 120)”

这可以更好地解释 PSR 规则,我现在是这样阅读的:

“你不应该写超过80 个字符的行,但如果你需要,你可以写。如果你超过 80 个字符,无论如何都要避免超过120 个字符的行”。

如果您有两个垂直标尺,这是完全可能的:将它们设置为80、120,您将知道何时超过第一个限制(警告),以及何时超过第二个限制(停止!)。

如果您使用自动代码格式化(我这样做,但人们讨厌我),那么您可以在 php 代码样式页面中设置Hard wrap at: 120。此设置将确保遵循 PSR 规则。

个人强项

老实说,现在我们的显示器比旧显示器宽很多因为它们使用 16:9 的纵横比而不是 4:3。所以我不认为遵循 120 个字符规则的紧迫性,因为 16:9 显示器可以轻松处理一行 200 多个字符(我在屏幕上打印了 224 个字符)。

无论如何,我不喜欢打破规则的想法,如果可以的话,我会在谈到编码标准时尝试遵循它们。也许我看不出规则的意义,但如果整个团队都在讨论这个话题,并决定将限制设置为 120 个字符,那么这个决定背后可能有我看不到的原因,所以我只是坚持下去。这就是标准对我的意义所在。

为什么 120 是一个很好的折衷方案

事实上,在过去的几周里,我已经开始垂直拆分编辑器的窗口,将一些文件类型保留在左侧,而将其他一些类型(通常是 JavaScript)保留在右侧。一开始可能有点奇怪,我是那种对错位的东西非常不安的人。但现在我已经习惯了,因为在实践中,这样效果更好!

我在某处读到,我们的视线不能很好地跟上超过一定长度的线条,你可以很容易地理解为什么。尝试阅读行数超过 200 行的文档,您会更容易失去焦点。可能你会多次忽略这一点并再次阅读整行......如果你能找到它的开始!

取而代之的是,最大长度在 80 到 120 之间的文档将有更多行,但更具可读性,并且您还可以在大多数情况下水平拆分屏幕,而无需滚动。

我只想说一下我在 PhpStorm 上的发现,和往常一样,我最终写了一张纸莎草纸。我道歉 :)

于 2019-08-02T17:22:20.017 回答
0

我很确定我在某处看到了另一种解释……我不知道这是不是真的,但我觉得我应该分享它=)

好的,就是这样:任何行都不应超过 80,但这并不能说明 indentation。使用缩进,限制为 120。

所以,如果你当前的缩进是 80(考虑“守卫”,顺便说一句……)——你只剩下 40 个字符了。但如果您当前的缩进是 40 或更少 - 您最多可以为实际代码使用 80 个字符。

于 2020-06-12T08:08:39.493 回答
0

理解所有FIG 标准的关键是正确解释RFC 中使用的关键词

行长不能有硬性限制。

虽然没有人会拿枪指着你的头……</p>

行长度的软限制必须是 120 个字符。

... 最好不要超过 120 个字符的长度...</p>

不应超过 80 个字符;超过这个长度的行应该分成多个后续行,每行不超过 80 个字符。

…但是,作为建议,尝试拆分超过 80 个字符的行。


这一切都归结为可读性。针对数字文本的易读性研究表明,与印刷文本一样,行长会影响阅读速度(扫视)。此外,事实证明,当跳到下一行时,潜意识是充满活力的(只要它不经常发生)。在每条新行的开头,读者都会集中注意力,但随着行的持续时间,这种注意力会逐渐消失(“Typographie”,E. Ruder)。

于 2020-10-31T18:47:29.347 回答