注意!PHP 7中不要做的10件事


Posted in PHP onSeptember 18, 2016

切记,在PHP 7中不要做的10件事

1. 不要使用 mysql_ 函数 

这一天终于来了,从此你不仅仅“不应该”使用mysql_函数。PHP 7 已经把它们从核心中全部移除了,也就是说你需要迁移到好得多的mysqli_函数,或者更灵活的 PDO 实现。

注意!PHP 7中不要做的10件事 

2. 不要编写垃圾代码 

这一条可能易于理解,但是会变得越来越重要,因为 PHP 7 的速度提升可能会隐藏你的一些问题。不要仅仅满足于你的站点速度,因为迁移到 PHP 7 才让它变快。 

为了理解速度有多重要,以及如何把事情做得更好,请看一看我们的文章速度优化入门指南。 

作为一名开发者,你应该总是确保按需加载脚本,尽可能连接它们,编写高效的数据库查询,尽可能使用缓存,以及其它。 

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

你可以看一看,当一个文件以 PHP 代码结尾时,WordPress 多数核心代码都把末尾的 PHP 标签去掉了。实际上,Zend 框架特别禁止了它。PHP 并不需要文件末尾的闭合标签,并且我们可以通过去掉它来保证不会在后面添加任何的空白字符。 

4. 不要做不必要的引用传递 

我个人不喜欢引用传递。我知道有时候它很实用,但是其它情况下它使代码变得难懂,并且更难预测结果。 

据说一些人认为它使代码运行更快,但是根据一些 PHP 高级程序员所说,这并不正确。 

说明引用为什么不好的一个例子是,PHP 内建了shuffle()和sort()。它们修改原始数组,而不是返回处理后的数组,这很不合逻辑。 

5. 不要在循环中执行查询 

在循环中执行查询非常浪费。它给你的系统施加不必要的压力,并且可能能够在循环外部更快获得相同结果。当我遇到需要这样的情况时,我通常会使用两个分离的查询来解决问题,我会使用它们来构建数据数组。之后我会遍历数组,并不需要在这个过程中执行查询。 

由于 WordPress 适用于这里,它可能有一些例外。虽然get_post_meta() 会从数据库获取大量数据,如果你正在遍历某个特殊博文的元数据你可以在循环中使用它。这是因为当你第一次调用它的时候,WordPress实际上会获取所有元数据并缓存它们。后续的调用使用这些缓存数据,没有数据库的调用。 

弄懂这些的最佳方式是阅读函数文档,以及使用类似 Query Monitor 的工具。 

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

当然,这个更像 MySQL 的问题,但是我们习惯在 PHP 中编写 SQL 代码,所以都差不多。无论如何,如果可以避免的话,不要在 SQL 查询里使用通配符,尤其是数据库有很多列的时候。 

你应该明确指定需要哪些行,并且仅仅获取它们。这有助于减少所用资源,保护数据,以及让事情变得尽可能清晰。 

对于 SQL,你需要了解所有可用的函数,并且尽可能测试其速度。在计算均值、求和或计算类似数值时,要使用 SQL 函数而不是 PHP 函数。如果你不确定某个查询的速度,测试它并且尝试一些其它的编译 — 之后使用最好的那个。 

7. 不要信任用户输入 

信任用户输入是不明智的。始终校验、过滤、转义、检查并留好退路。用户数据存在三个问题:我们开发者并没有考虑每种可能性,它通常不正确,以及它可能是蓄意破坏。 

经过周密考虑的系统可以防护这些威胁。要确保使用类似filter_var()的内建函数检查适当的值,以及在处理数据库时转义(或预编译)。 

WordPress 拥有一些函数来解决问题。详见文章校验、转义和过滤用户数据。 

8. 不要故作聪明 

你的目标应该是编写优雅的代码,来更清晰地表达你的意图。你可能能够通过将任何东西缩短为一个单词的变量,使用多层的三元逻辑,以及其它手段,从每个页面中优化 0.01 秒。但这只会给你和你周围的人产生大麻烦。 

合理命名变量,为代码编写文档,优先选择清晰而不是简洁。甚至还可以更好,使用标准的面向对象代码,它本身或多或少就是文档,不需要一大堆内联数值。 

9. 不要重新发明轮子 

PHP 到现在为止有很长时间了,网站被造出来的时间更长。很可能无论你需要造出什么,一些人之前早就造出来了。不要害怕向他人寻求支持,Github是你的好朋友,Composer也是,Packagist也是。 

从日志工具到调色工具,从性能分析器到单元测试框架,从 Mailchimp API 到 Twitter Bootstrap,每个东西都可以通过按下按键(或者敲下命令)来获取,使用它们吧! 

10. 不要忽略其它语言 

如果你是个 PHP 程序员,现在有个好机会去至少了解 HTML、CSS、JavaScript 和 MySQL。当你能够更好地处理这些语言时,就是重新学习 JavaScript 的时机了。JavaScript 并不是 jQuery,你应该合理地学习 JavaScript 来更高效地使用它。 

我也打算向你推荐学习面向对象的 PHP,它可以节省时间,并且在代码规模更大时会变得更好。对于类似 C# 和 Java 的语言,在你了解 OOP 之后,它们也更易于理解。 

通过了解包管理器、构建脚本、CoffeeScript、LESS、SASS、YAML 、脚本引擎和其它强大的工具来扩展你的知识面。我强烈向你推荐看一看其它框架,尤其是 Laravel。 

当你使用它们出色完成任务时,学习 Ruby、RoR、Android、iPhone 和 Windows Phone 应用开发如何?你可能会认为这毫无意义,因为它们在你的舒适区和工作所需范围之外,但是这就是它们的意义。每种语言都有一些要学习的实用的东西,以及从没碰到的新知识。所有 PHP 顶级开发者都懂得很多其它编程语言,这并非偶然。

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php实现的Cookies操作类实例
Sep 24 PHP
PHP中echo,print_r与var_dump区别分析
Sep 29 PHP
PHP永久登录、记住我功能实现方法和安全做法
Apr 27 PHP
PHP中的类型提示(type hinting)功能介绍
Jul 01 PHP
php魔术方法功能与用法实例分析
Oct 19 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
Apr 18 PHP
phpStudy配置多站点多域名和多端口的方法
Sep 01 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
May 12 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
Aug 02 PHP
PHP PDOStatement::execute讲解
Jan 31 PHP
laravel7学习之无限级分类的最新实现方法
Sep 30 PHP
深入理解PHP类的自动载入机制
Sep 16 #PHP
PHP实现链式操作的原理详解
Sep 16 #PHP
详解PHP中websocket的使用方法
Sep 15 #PHP
PHP简单实现上一页下一页功能示例
Sep 14 #PHP
PHP自定义函数格式化json数据示例
Sep 14 #PHP
ThinkPHP中session函数详解
Sep 14 #PHP
PHP大神的十大优良习惯
Sep 14 #PHP
You might like
开源SNS系统-ThinkSNS
2008/05/18 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
PHP中判断变量为空的几种方法小结
2013/11/12 PHP
完善CodeIgniter在IDE中代码提示功能的方法
2014/07/19 PHP
小议Function.apply() 之一------(函数的劫持与对象的复制)
2006/11/30 Javascript
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
WEB高性能开发之疯狂的HTML压缩
2010/06/19 Javascript
JSON.stringify 语法实例讲解
2012/03/14 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
2013/04/18 Javascript
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
基于jquery的手风琴图片展示效果实现方法
2014/12/16 Javascript
jQuery 选择器详解
2015/01/19 Javascript
一看就懂:jsonp详解
2015/06/01 Javascript
JQuery中DOM实现事件移除的方法
2015/06/13 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
Javascript必知必会(四)js类型转换
2016/06/08 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
在vue项目实现一个ctrl+f的搜索功能
2020/02/28 Javascript
[03:16]DOTA2完美大师赛主赛事首日集锦
2017/11/23 DOTA
Python程序设计入门(5)类的使用简介
2014/06/16 Python
浅谈Python中的数据类型
2015/05/05 Python
django js实现部分页面刷新的示例代码
2018/05/28 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
2019/12/27 Python
Python3 hashlib密码散列算法原理详解
2020/03/30 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
pycharm专业版远程登录服务器的详细教程
2020/09/15 Python
少先队学雷锋活动总结范文
2014/03/09 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
三十年同学聚会感言
2015/07/30 职场文书
小学数学教学反思范文
2016/02/16 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript