十个你需要在 PHP 7 中避免的坑

翻译 Summer ⋅ 于 1个月前 ⋅ 最后回复由 晨雨零稀 2周前 ⋅ 2418 阅读 ⋅ 原文地址
这是一篇社区协同翻译的文章,已完成翻译,更多信息请点击 协同翻译介绍

file

1. 不要使用 mysql_ 类函数

终于,你不用再看到建议不要使用 mysql_ 函数的提示了。因为 PHP 7 从核心上完全移除了它们,这意味着请你移步至更好的 mysqli_ 类函数,或者更灵活的 PDO 层。

wilson_yang 翻译于 1个月前

2. 不要写无用的代码

这看上去是个无脑建议,但是随着 PHP7 速度的提升掩盖了一些问题使它显得日趋重要。不要仅仅因切到 PHP7 让网站速度变得快点,你就沾沾自喜了。

想理解速度的重要性和如何做的更好,去看看我们这篇文章 初学者加速优化指南

作为开发者,应该确保按需加载脚本,可能时再组合,编写高效的数据库查询语句,如果可能的话 使用缓存 等等。

3. 不要在文件末尾使用 PHP 闭合标签

如果你随便看看,就会发现大部分 WordPress 核心代码文件结尾都省略了 PHP 闭合标签。事实上,Zend 框架尤为明显地 禁止了闭合标签。它并非 PHP 所必须,在文件结尾处省略它,可确保结尾无额外空白。

wilson_yang 翻译于 1个月前

4. 如非必须不要引用传参

我个人非常不喜欢引用传参。我当然知道在某些场合下它很有用,但是多数场合下,它会使得代码难以理解,难以遵循,难以预测结果。

人们认为引用可以使它们的代码更快,不过正如 可敬的 PHP 程序员 的这篇文章所指出的,事实并非如此。

PHP 内置的 shuffle() 或者 sort() 函数,就是糟糕的引用传参案例。 它修改了原数组而不是返回一个打乱的或者排好序的数组,这是完全违背了我们意愿的。

5. 不要在循环里使用查询

在循环中使用数据库查询时最糟糕的。他会给系统带来不必要的压力,并且很有可能,你可以在循环外使用查询而更快的得到相同的结果。当我碰到必须这样用的场景时,我通常会通过分成两个查询来构造一个数组的方式来解决。然后循环数组而无需循环查询。

由于 WordPress 的运行方式,这样做可能会有些例外。 get_post_meta() 将从数据库获取一个元数据,如果您正在循环访问特定文章的元数据,则可以在循环中使用它。这是因为当你第一次使用它的时候,WordPress 实际上取得了所有的元数据并缓存了起来。 之后的调用实际上是调用缓存数据而不是调用数据库。

解决这些问题的最好办法是阅读函数文档并且使用一些类似 查询监听器 的东西。

JiaZombie 翻译于 1个月前

查看其他 2 个版本

6. 不要在 SQL 查询中使用 *

好吧,这更像是一个 MySQL 的问题,但我们更倾向于在代码中编写 SQL 语句,所以我说这是个公平的游戏。不管什么情况下,如果你能避免使用通配符,那就不要使用,尤其是当你的数据库有很多字段的时候。

明确指定你需要的字段,并且只检索这些字段。这有助于节省内存,保护数据,并且能让事情变得更加清晰明白。

在 SQL 方面,尽可能的了解你可用的函数并测试速度。 当计算平均数,求和以及计算相似的数字的时候,使用 SQL 内置函数而不是 PHP 的函数。 如果你不确定一个查询的速度快慢,测试一下它并和其他做法进行比较,选出最好的那一种。

7. 不要信任用户的输入

信任用户输入并不明智。对于用户输入,总是需要过滤,杀毒,转义,校验以及使用回退。 用户输入存在三个问题:我们开发者不可能考虑到所有可能性,经常出错,存心的恶意输入。

一个经过深思熟虑的系统可以防止所有的这些问题。 在使用数据库时,确保使用内置的函数,如 filter_var(),来检查合法性,进行转义,和其他能做的事。

WordPress 有一堆函数可以帮到你。可以瞧一瞧这篇文章来了解更多信息 Validating, escaping and sanitising user data 。

JiaZombie 翻译于 1个月前

8. 不要自作聪明

你的目标就是写出能清晰的表达你的意愿的优雅代码。可能你通过缩短变量名,使用多层级三目逻辑运算和其他小聪明让每个页面节约了0.01秒的加载时间,但是和因此种下你和你的团队头疼不已难以维护的恶果相比,得不偿失。

恰当的命名变量,以简洁明了的方式写出代码文档。更好的做法就是,使用标准化的面向对象的代码风格,或多或少的编写文档,而非使用大量的内联代码注释。

9. 不要重复造轮子

PHP 已经存在有一段时间了,网站开发存在的时间甚至更久远。 无论你做过啥,前人肯定已经做过。不要害怕依赖别人的支持, Github, Composer , Packagist 都是你的良师益友。

从日志到颜色处理器,从分析器到单元测试框架,从 Mailchimp APIs 到 Twitter Bootstrap,所有的东西只需要按一个按钮(或者敲一个命令)就能用,去使用它们吧!

wilson_yang 翻译于 1个月前

10. 不要忽视其他编程语言

作为 PHP 开发人员,现在的标准是至少要了解 HTML,CSS,Javascript 和 MySQL 。当你对这些语言的掌握达到相当的程度之后,是时候再去学习一遍 Javascript 。Javascript 并不是 jQuery 。你应该充分学习 Javascript 以便能够去有效地利用它。

我还建议你学习所有有关 PHP 面向对象的知识,这是一种救生工具,同时会使你的代码在数量级上达到更好。这也将打开一扇通向 C# 和 Java 等其他编程语言的大门,由于有过 OOP 的学习经历,其他编程语言也会更加容易被理解。

接下来学习诸如,包管理器,构建脚本,Coffeescript,LESS, SASS, YAML,模版引擎,等令人惊叹的工具去扩展你的知识领域。我强烈地推荐多去了解一些其他框架,特别是 Laravel 。

当你能把这些事情做的相当好的时候,那么关于 Ruby, Ruby on Rails,Android 应用开发, iPhone, Windows Phone 这些呢? 你可能想那是不重要的,因为对这些领域的涉足会使你走出舒适区,同时还超出了你的工作需要,但是这恰恰才是关键所在。每种语言都有值得学习的地方,多学一点并没有坏处。顶级的 PHP 开发者都了解很多语言并不是偶然!

庞浩然Paul 翻译于 1个月前

查看其他 1 个版本

原文地址:https://kinsta.com/blog/10-things-not-to...

译文地址:https://laravel-china.org/topics/9334/te...


本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

本帖已被设为精华帖!
回复数量: 8
  • Ucer good good study, day day up
    1个月前

    就 「9. 不要重复造轮子」 来说,有些不成熟的轮子 (star < 10) 要不要去用对我来说是个问题。

  • 咖啡是個軟件猴
    1个月前

    如何避免在循环中使用查询呢

    如果不得不查询呢

  • MCyunpeng98 1
    1个月前

    @咖啡是個軟件猴 不是可以预加载嘛?

  • 咖啡是個軟件猴
    1个月前

    @MCyunpeng98 哦 ? 新手没听说过这个 我去研究下 thanks

  • Eddic
    1个月前

    第 6 点的 不要在 SQL 查询中使用 *,在很多地方看到,但一直有疑惑。
    在使用了 ORM 的情况下,如 users 表对应了 User Model,查询 1 条用户数据时,只查某几个字段,会不会造成用户属性缺失,导致后续的代码问题?
    如:查询了一个用户数据为 $user,一开始只查了 id 和 name,后续开发,需要调用其他函数,传入 $user 参数,该函数需要用到 gender 字段,从而导致错误。

  • MCyunpeng98
    1个月前

    @Eddic 肯定会啊,需要的话,还是添加一下查询字段!

  • Eddic
    1个月前

    @MCyunpeng98 嗯,所以我觉得这个还是要看场景,第 6 点更适用于“列表”查询。如果是使用 ORM 做单条查询,作为一个 Model 对象的,我认为用 * 会好点

  • 晨雨零稀
    2周前

    一律用*,字段多就是表设计不合理了。

暂无评论~~

  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!