php 意大利面代码的特点是什么?

omqzjyyz  于 2023-04-10  发布在  PHP
关注(0)|答案(4)|浏览(89)

有人说,当你的PHP代码和应用程序使用全局变量时,它一定是意大利面条代码(我假设是这样)。我经常使用WordPress。据我所知,它是接近伟大PHP软件的最好的东西。它使用许多全局变量来在组件之间进行交互。
但忘了这些吧,因为坦白说,这是我唯一知道的。所以这完全是有偏见的;D

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

PS:我唯一知道的是WordPress。所以,希望,也许这将帮助某人给予一个很好的答案,对于那些在PHP上开发完整的Web应用程序(例如,Stack Overflow网站)的经验很少的人。

vuv7lop3

vuv7lop31#

  • 没有模块性(所有内容都在一个文件、类、模块、名称空间、包或任何你的语言用来提供模块性的东西中),
  • 很多goto
  • 组织不力
  • 没有明确的功能和用途的分离(即,所有的类或函数都包含在内)
  • 长函数。
  • 可怜的名字。
  • 没有一致的编码风格。
  • 在代码的实现和客户端之间没有清晰的接口契约。(也就是说,没有关于函数的输入、输出、前置和后置条件是什么的规范)
  • 过度依赖数据结构的内部结构,几乎没有抽象。
  • 函数随机排列/修改全局状态,而在文档中没有任何提及。
  • 缺少重要代码的注解或文档。
  • 比实际需要更复杂的代码。
  • 缺乏重用。(大量重复代码,也就是copypasta
  • 没有验证或单元测试(它在信仰上工作)。
  • 神奇的数字

从本质上讲,这是一种缺乏设计和远见的行为,只是一堆乱七八糟的黑客拼凑在一起。这适用于任何语言,而不仅仅是PHP。
对于在PHP上开发完整的Web应用程序(例如,Stack Overflow网站)的经验很少的人
仅供参考,但Stack Overflow不是用PHP开发的。

2o7dmzc5

2o7dmzc52#

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

function hello_testing($conditional_random) {
  if ($conditional_random)) {
      echo "foo is inside";  
  }
}

P.S. http://en.wikipedia.org/wiki/Spaghetti_code

sf6xfgos

sf6xfgos3#

意大利面条式代码有一些特殊的特点,这些特点将它与普通的糟糕代码区分开来。意大利面条式代码极其复杂且无结构,因此很难在程序中遵循流程。这就像试图解开一碗“肉酱”中的面条一样。
这就是为什么GOTO语句(可怕的词!)经常在这种情况下被引用:GOTO语句将控制转移到代码库中的另一个任意定义的位置。大多数编程语言都有可以被滥用来模拟goto风格行为的命令;例如,使用异常来实现常规业务逻辑,而不是处理错误。
全局变量是意大利面条式代码的一部分,因为它们的值是在当前程序单元的作用域之外赋值的。这使得确定一个变量在代码库中的哪个位置被设置为给定的值(或者实际上它是否被设置为任何值)变得困难。
意大利面条式代码可能在功能上是正确的,也可能是执行性的。这是一个问题,因为它很难理解,所以我们不能确定它是没有错误的,而且缺乏结构也很难排除故障。出于类似的原因,意大利面条式代码很脆弱,很难修改;引入错误的风险很高。
顺便说一句,使用goto语句并不意味着一个程序是意大利面条。使用goto编写清晰,结构良好的代码是完全可能的,只是需要大量的自律,不要滥用它的灵活性。现代编程语言已经使它的使用变得不必要,也不受欢迎。

f45qwnt8

f45qwnt84#

WordPress是我见过的最大的一段意大利面条式的PHP代码。PHP,HTML,JavaScript和所有介于两者之间的东西都集中在同一个文件中。如果你想要另一个意大利面条式代码的例子,看看osCommerceZen Cart
事实上,我敢说大多数开源PHP应用程序都是用PHP编程的令人震惊的例子。(也就是非意大利面)然后看看Yii框架或者Zend Framework .像CodeIgniter和Kohana这样的框架,虽然不是意大利面,并不是在PHP 5中如何构造事物的很好的例子,因为它们使用了PHP 4中使用的许多功能,只是因为在PHP 5之前没有更好的方法来做这些事情(例如,使用基于路径的继承而不是真正的对象继承)。
如果你想要一个合理的好的过程式编程的例子,看看Drupal。由于复杂性,它可能不是最好的PHP应用程序,但它肯定胜过WordPress,你可以用它做很多相同的事情。

相关问题