意大利面条代码有什么特点?

jus*_*joe 12 php wordpress coding-style

有人说当你的PHP代码和应用程​​序使用全局变量时,它必须是意大利面条代码(我假设这一点).我经常使用WordPress.据我所知,这是伟大的PHP软件附近最好的事情.它使用许多全局变量在其组件之间进行交互.

但是忘记这一点,因为坦率地说,这是我唯一知道的事情.所以它完全有偏见; D

所以,我只是好奇,意大利面条代码的特点是什么?

PS:我唯一知道的是WordPress.所以,希望这可能有助于某些人在PHP上开发完整的Web应用程序(例如,Stack Overflow网站)上几乎没有经验的人给出一个很好的答案.

Ale*_*ski 22

  • 没有模块化(一个文件,类,模块,命名空间,包或任何语言用于提供模块化的一切),
  • 很多goto,
  • 组织不好,
  • 没有明确的功能和目的分离.(也就是说,无所不包的类或功能)
  • 功能齐全.
  • 命名不佳.
  • 整个编码风格不一致.
  • 实现与代码客户端之间没有明确的接口契约.(也就是说,没有规定功能的输入,输出,前后条件)
  • 过度依赖数据结构的内部,几乎没有抽象.
  • 函数随机置换/修改全局状态,而不在文档中提及它.
  • 缺乏关于非平凡代码的评论或文档.
  • 代码比它需要的更复杂.
  • 缺乏重用.(大量的重复代码,又名copypasta)
  • 没有验证或单元测试(它适用于信仰).
  • 魔术数字.

从本质上讲,缺乏设计和预见,只是混乱的黑客混杂在一起.这适用于任何语言,而不仅仅是PHP.

对于在PHP上开发完整Web应用程序的经验不足的人(例如,Stack Overflow网站)

仅供参考,但Stack Overflow不是用PHP开发的.

  • 猜猜我们找到了那个没有的! (4认同)

You*_*nse 7

好吧,谈到你发表的评论,解释很简单.使用global运算符使变量的来源未知,就像意大利面条的另一端.它可以在任何地方定义.所以,当你调用你的函数时,你不知道这个变量有什么价值.而不是直接传递变量使它变得简单明了:

function hello_testing($conditional_random) {
  if ($conditional_random)) {
      echo "foo is inside";  
  }
}
Run Code Online (Sandbox Code Playgroud)

PS http://en.wikipedia.org/wiki/Spaghetti_code

  • 嗯..这不仅仅是它的来源未知,而是它没有被正确封装.如果你开始把所有东西扔到全球空间,你会开始得到名字冲突,以及其他问题...... (2认同)

APC*_*APC 5

Spaghetti代码具有特定的特征,可以将其与普通的差代码区分开来.Spaghetti极其复杂且非结构化,因此很难跟踪整个程序的流程.这就像试图在一碗肉酱里解开面条.

这就是为什么GOTO在这种情况下经常引用语句(恐惧词!):GOTO语句将控制转移到代码库中另一个任意定义的位置.大多数编程语言都有可以滥用的命令来模拟goto样式行为; 例如,使用异常来实现常规业务逻辑而不是处理错误.

全局变量对意大利面条代码有贡献,因为这些值是在当前程序单元范围之外分配的.这可能使得难以确定变量被设置为给定值的代码库中的位置(或者实际上是否将其设置为任何值).

顺便说一下,使用goto陈述并不意味着程序是意大利面条.使用完全可能编写清晰,结构良好的代码goto,只需要很多自律就不要滥用它的灵活性.现代编程语言使其使用不必要,并且是不可取的.