您知道什么是PHP特定的反模式?

Eli*_*jah 18 php anti-patterns

PHP作为一种钝器

我听说PHP最近遭遇了很多.在很多项目中,我已经看到了疯狂的PHP代码库 - 你真的很想知道这个人在编写代码时是否使用致幻药物.有时,我想知道如果最初的开发人员对不该做的事情有更多的指导,代码会是什么样的.

但是,我也看到了一些非常有条理的PHP项目,这些项目是用100%OOP完成的,并且很乐意维护,但它们不是由"php程序员"编写的.

我给所有初级开发者提供了Java Anti-Patterns的链接.该页面的一个好处是特定于Java的示例,因为Java的许多功能都适用于常见错误.我希望找到一个类似的PHP列表,但谷歌搜索没有透露任何有意义的.

关于编程PHP时开发人员应该知道的问题已经存在一些问题,但我想关注负面问题.

您在PHP中看到的常见问题应该避免哪些常见问题以及以更好的方式执行相同操作的常见解决方案是什么?

我想到的一些明显的例子我会想到,但不是PHP具体的:

  • 不要连接SQL.使用准备语句或适当的转义.
  • 不要盲目地将PHP嵌入到HTML中 - 使用模板/ MVC.
  • 不要盲目发布未经过滤的原始用户输入 - 将其擦除以进行XSS攻击.
  • 不要手动尝试解析所有POST和GET - 使用Web框架.

这里有一些我会考虑PHP特定的例子:

  • 不要有太多的文件包含/要求链接层,并尽量避免条件链接.相反,有一个合理的命名约定,并与您的组织保持一致.
  • 不要使用PHP原始数据库API,除非您可以帮助它,而是使用像ADODB这样的数据库框架.
  • 不要过度使用PHP的动态类型,方法是将变量设置为一个地方的字符串,将布尔值设置在其他地方,然后期望布尔测试有意义.

那么,你最喜欢的PHP 不应该做什么,你是如何做到的?

cgp*_*cgp 16

我不同意这个:

  • 不要盲目地将PHP嵌入到HTML中 - 使用模板/ MVC.

PHP是一种模板语言.虽然我同意实现MVC的概念,但我不明白为什么需要在生成Web输出时实现另一个DSL.

  • 按照同样的逻辑,如果PHP是一种"模板语言",那么我应该嘲笑你用它来编写业务逻辑.使用模板可以使a)更具表现力,更少冗长; b)为不受信任的用户提供创建内容的安全方式.当然,普通的PHP通常可以直接用作模板层(通常是最好的选择),但这并不能使它成为最终的选择. (3认同)
  • PHP是一种模板语言! (2认同)

the*_*art 9

在php文件的末尾添加关闭"?>"标记可能会导致意外地将白色空格推送到输出缓冲区.PHP解释器会自动为文件添加结束标记,手动执行它有点像反模式.


MrF*_*Fox 5

  1. 永远不要使用$_GET$_POST不检查并清理它.
  2. 了解如何设置php.ini正确的.
  3. 永远不要将变量放入原始SQL.
  4. 如果使用框架,请使用具有较少依赖性的框架.
  5. 停止过度概括.
  6. 在php文件上分发代码.在大多数情况下,没有必要把所有东西都放在一起index.php.
  7. 在编写代码之前降低复杂性.
  8. 尊重它是一个Web应用程序的事实.(尝试RESTful.)它不是桌面应用程序.所以,不要把一切成$_SESSION.
  9. 每10行代码至少有一条注释行.一年后你会读到这个.我承诺!
  10. 代码就像一个女孩 - 让它很好看.

  • 不能同意9.当然,你会在一年后阅读,但代码应该是自我完善的,以便理解它.评论变得比代码快得多.维护代码命名约定比记住更新注释更容易. (5认同)

adh*_*nem 5

我目前最讨厌的是查询函数的返回类型不一致。这是当你调用一个函数来执行查询时,它返回

  1. 未找到匹配项时为 NULL 或 FALSE 或类似内容
  2. 找到单个匹配项时的匹配对象/值
  3. 找到多个匹配项时的匹配对象/值数组

这迫使您检查返回类型并专门处理每种情况。总是简单地返回一个包含 0、1 或 n 个元素的数组会好得多。