1、不要使用mysql_函数

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

  2、不要编写垃圾代码

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

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

  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()的内建函数检查适当的值,以及在处理数据库时转义(或预编译)。

  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顶级开发者都懂你的很多其他编程语言,这并非偶然。

  

注意:PHP7中十个需要避免的坑的更多相关文章

  1. 【Fine原创】JMeter分布式测试中踩过的那些坑

    最近因为项目需要,研究了性能测试的相关内容,并且最终选用了jmeter这一轻量级开源工具.因为一直使用jmeter的GUI模式进行脚本设计,到测试执行阶段工具本身对资源的过量消耗给性能测试带来了瓶颈, ...

  2. PHP7中我们应该学习会用的新特性

    PHP7于2015年11月正式发布,本次更新可谓是PHP的重要里程碑,它将带来显著的性能改进和新特性,并对之前版本的一些特性进行改进.本文小编将和大家一起来了解探讨PHP7中的新特性. 1. 标量类型 ...

  3. Golang中WaitGroup使用的一点坑

    Golang中WaitGroup使用的一点坑 Golang 中的 WaitGroup 一直是同步 goroutine 的推荐实践.自己用了两年多也没遇到过什么问题.直到一天午睡后,同事扔过来一段奇怪的 ...

  4. PHP7中的数据类型

    PHP中变量名→zval,变量值→zend_value.其变量内存是通过引用计数管理的,在PHP7中引用计数在value结构中. 变量类型: 头文件在PHP源码 /zend/zend_types.h ...

  5. 10件在PHP7中不要做的事情

    10件在PHP7中不要做的事情 1. 不要使用mysql_函数 这一天终于来了,从此你不仅仅“不应该”使用mysql_函数.PHP 7 已经把它们从核心中全部移除了,也就是说你需要迁移到好得多的mys ...

  6. 什么是PHP7中的孤儿进程与僵尸进程

    什么是PHP7中的孤儿进程与僵尸进程 基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程.子进程的结束和父进程的运行是一个异步过程,即父进程永远无法 ...

  7. PHP7中Protobuf的安装使用

    PHP7中Protobuf的安装使用 写这篇文章的缘由是最近在关注RPC框架序列化的一些原理.但是在安装Protobuf的时候,发现网上的教程都太老了,加上目前Protobuf官方已经支持PHP了,不 ...

  8. PHP7中session_start 使用注意事项,会导致浏览器刷时页面数据不更新

    //PHP7中session_start 使用注意事项, session_start([ 'cache_limiter' => 'private', //在读取完毕会话数据之后马上关闭会话存储文 ...

  9. php7中异常

    php7中新增异常错误处理 在PHP7之前的版本,对于一些错误异常是没有办法捕获的. php7中新增throwable接口,可以用来捕获一些错误 Exception,Error这实现了Throwabl ...

随机推荐

  1. 【BZOJ2905】背单词 fail树+DFS序+线段树

    [BZOJ2905]背单词 Description 给定一张包含N个单词的表,每个单词有个价值W.要求从中选出一个子序列使得其中的每个单词是后一个单词的子串,最大化子序列中W的和. Input 第一行 ...

  2. Fragment、FragmentTabHost以及RadioGroup框架

    package com.dotfive.chuanbang.activity; import test.Fragment1; import test.Fragment1.OnBackListener; ...

  3. vector排序问题<unresolved overloaded function type>

    要对vector中的自定义类型进行排序,首先需要提供一个函数bool comp(const Interval & a, const Interval & b) 来定义类型的排序准则 然 ...

  4. pageResponse - 让H5适配移动设备全家

    http://www.cnblogs.com/PeunZhang/p/4517864.html

  5. SVN备份及恢复

    一,SVN备份 svnadmin dump /data/svn/blzfmima/ > /tmp/full.svn.bak 其中/data/svn/blzfmima/为svn文件夹,导出成一个备 ...

  6. Python全栈day28(上下文管理)

    我们知道在操作文件对象的时候可以这么写 with open('a.txt',''r) as f: 代码 上述叫做上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明 ...

  7. 每天一個Linux指令- chmod指令

    拷貝來源: 01.http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html 02.http://www.cnblogs.com/peid ...

  8. 用Python构建你自己的推荐系统

    用Python构建你自己的推荐系统 现如今,网站用推荐系统为你提供个性化的体验,告诉你买啥,吃啥甚至你应该和谁交朋友.尽管每个人口味不同,但大体都适用这个套路.人们倾向于喜欢那些与自己喜欢的其他东西相 ...

  9. 用于金融分析的Python包

    1. NumPy:实现各种数组对象函数和傅立叶变换等等科学计算模块.2. SciPy:提供更多科学计算功能,包括矩阵,求解线性方程组,积分运算,优化等.3. matplotlib:一个跨平台的数值绘图 ...

  10. Yii框架2.0的 验证码

    最近看了一个Yii的教程视频,是按1.1的版本讲的,我想用Yii2.0的框架也参考他的学习开发下,结果发现好多不一样的,现在就说说验证码的事 首先加入一个actions 做验证码图片的显示,实际事调用 ...