21

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不做的事情是什么,你是如何做到的呢?

4

7 回答 7

16

我不同意这个:

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

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

于 2009-04-27T12:36:28.050 回答
9

在 php 文件的末尾添加关闭“?>”标签可能会导致意外地将空格推送到输出缓冲区。PHP 解释器会自动将结束标记添加到文件中,而手动执行此操作在某种程度上是一种反模式。

于 2012-08-15T19:58:31.330 回答
5
  1. 永远不要使用$_GET$_POST不检查并清理它。
  2. 阅读有关如何设置php.ini权限的信息。
  3. 永远不要将变量放入原始 SQL。
  4. 如果您使用框架,请使用依赖较少的框架。
  5. 停止过度概括。
  6. 在 php 文件上分发您的代码。在大多数情况下,没有真正需要将所有内容合二为一index.php
  7. 在编写代码之前降低复杂性。
  8. 尊重它是一个 Web 应用程序这一事实。(尽量使用RESTful。)它不是桌面应用程序。所以不要把所有东西都放进去$_SESSION
  9. 每 10 行代码至少有一个注释行。一年后你会读到的。我保证!
  10. 像女孩一样编写代码- 让它读起来很舒服。
于 2009-04-27T20:26:22.647 回答
5

我目前的烦恼是查询功能的返回类型不一致。这是当您调用函数来执行查询时,它会返回

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

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

于 2013-10-07T15:04:38.057 回答
2

我最喜欢的 DON'T 之一必须是:

$query = 'select * from users where username = ' . $_POST['username'];

还能比这更可怕吗?

于 2009-04-27T12:42:19.207 回答
0
  • 使用声压级
  • 使用 PDO 而不是使用 mysql_query 或 pg_query 或其他
  • 始终在用户输入上使用过滤器扩展
于 2010-08-14T15:22:59.167 回答
0

如果我必须包括一个最喜欢的,它不是必须是 karim79 发布的:

$query = 'select * from users where username = ' . $_POST['username'];

许多 PHP 开发人员一直停留在结构化时代。PHP 从前一段时间就支持类和对象,我只是不明白为什么人们一直将 PHP 硬编码为 html,没有模板或什么都没有。

我相信,如果有这么多开发人员继续这样编程,来自其他语言(如 .NET 或 Java)的开发人员已经赢得了批评该语言的权利。PHP 是一门非常棒的语言,非常灵活,仍然有点初级但正在成长,但许多人就是不明白,他们只想通过制作旧的经典复制粘贴来解决。

于 2010-08-14T15:12:31.967 回答