新手学习PHP的避雷针,这些坑在PHP开发中就别跳了
不要!用记事本编辑php文件
早些年能用记事本编程是一些人自我吹嘘的资本,能用记事本编程就是牛逼的代名词。但是这里要告诫大家的是,千万不要使用Windows自带的记事本编辑任何文本文件。用Windows记事本编辑php文件会造成一些意想不到的错误,就是因为其给文件增加的bom头被php执行的时候当作了内容输出。
php是不支持有BOM的,php文件应该保存为UTF-8无BOM类型,所以在保存 UTF8 编码PHP文件时,不要使用 BOM。

不要!用@屏蔽错误消息
用@屏蔽错误消息的做法非常低效,我们可以使用error_reporting(0)来关闭错误报告。如果觉得每行这样写麻烦,还可以配置php.ini文件,搜索display_errors = on,默认是on表示开启报错功能,改为off。
其实我们应该正视编程中的所有所有错误级别的错误,在开发环境中,处理注意(Notices)、警告(Warnings)、致命错误(Fatal errors)的所有错误,现在thinkphp、laravel都是默认开启error_reporting(E_ALL)的,那么咱们就别掩耳盗铃,用@屏蔽错误消息。
变量比较不要!用==
字符串是否相同建议用 === 而非 ==,因为这个比较是弱类型。两个值比较时,PHP会先尝试判别左右两者是否为数字。在数值类型与字符串比较时,甚至一些数字开头的非数值串,比如 12=='12这个串' 得到的值也会是 true。这些情况下,可能会使本来并不相同的字符串被判定为相等。而使用===比较则为包含类型的比较,不会有任何转换,所以是可以准确比较字符串是否相同的。
不要!忽略单引号双引号的区别
PHP在双引号包围的字符串中搜寻变量,单引号则不会。双引号里面的字段会经过编译器解释后之后输出,单引号里面的不进行解释,直接输出。要输出的字符串有和变量重名的,就必须用单引号避免解析。
不要!使用退出历史舞台的 mysql_ 函数家族
PHP 7已经把mysql_ 函数从核心中全部移除了,你需要开启mysqli扩展或者pdo_mysql扩展,如果使用的Laravel则必须开启pdo_mysql扩展。也就是说你需要迁移到mysqli_函数,或者更灵活的PDO实现。

文件末尾不要!使用PHP闭合标签
php手册中标记章节告诉我们php代码都会以<?php … ?>的形式开头结尾。但如果内容是纯 PHP 的代码文件,最好在文件末尾删除 PHP 结束标记。这可以避免在 PHP 结束标记?>之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白,而脚本中此时并无输出的意图。
PHP 并不需要文件末尾的闭合标签,并且我们可以通过去掉它来保证不会在后面添加任何的空白字符。这也是为什么我们在html模板中用<?php … ?>写php代码,而写php类文件只有<?php开头却没有?> 结尾的原因。
不要!滥用引用传递
按值传递中原来参数的值在调用其他函数之后还是原来的值,而引用传递则是改变了原来的值。

按照按值传递的做法来传值时,如果需要原来的值发生改变,则需要在进行代码复制,若是值够大或者是一大串字符串时,会使代码比较多,重复,而引用传递则不需要复制PHP代码,对提高性能这一个方面有很大的优势,但是其它情况下它使代码变得难懂,并且更难预测结果。
不要!在循环中执行查询
在循环中执行查询非常浪费。它给你的系统施加不必要的压力,并且可能能够在循环外部更快获得相同结果。当我遇到需要这样的情况时,我通常会使用两个分离的查询来解决问题,我会使用它们来构建数据数组。之后我会遍历数组,并不需要在这个过程中执行查询。我们应该时刻避免编写的程序与数据库有过多的交互,在循环中执行查询意味着每次循环都要执行相应的查询,数据库负担不起如此沉重的负担。
不要!依赖MySQL数据库
毫无疑问MySQL数据库在php编程中的重要性仅次于php语言本身,可以说没有MySQL就没有php今天的火爆,LAMP架构是刻在每一个phper骨髓里的。

php7发布以来,php的运行速度可以说突飞猛进,实测php7比php5性能提升了4倍,但是这并不能确定的说用php7开发的项目比用php5开发的项目性能能提升4倍,因为程序与MYSQL交互是有瓶颈的,不是程序有多少请求MYSQL就能处理多少,它在一些特殊情况下,如秒杀场景中MYSQL已经不适用,学会使用noSql数据库将会是必要的。
不要!重新发明轮子
PHP生态发展日趋完善,有许多优秀的轮子被制造出来并被免费分享,基本都是可以商业应用的,Github,码云,Packagist应该是我们亲密的伙伴,有什么需要,就先问问小伙伴有没有可以用的轮子吧。

另外别忘了Composer这个大管家(包管理器),在php开发中,只需要一行命令就可以让Composer为我们的项目安装一个轮子,并且找到这个轮子用到的轮子一并安装。
不要!信任用户的输入
信任用户的输入是不明智的。我们开发者并没有考虑每种可能性,它通常不正确,以及它可能是蓄意破坏。
对于用户的输入,前端验证、后端验证是用户输入验证的必须环节,千万不要只做前端验证或者只做后端验证。正确的做法是同时使用前后端验证,并且保持前后端验证队则一致。比如要求用户名必须为大于8位且不能包含特殊字符的字符串,这个条件就要在前后台都验证用户输入的长度不能小于8位,不能包含特殊字符。前端验证完毕允许用户提交数据,数据提交到后端再次验证,以确保输入数据的正确性。
不要!盲目觉得php是世界上最好的web编程语言
对于一个phper来讲,php是世界上最好的web编程语言,对于学习java、python、及其他编程语言可能会被认为这毫无意义,因为它们在你的舒适区和工作所需范围之外。但对于想进一步提升编程水平的朋友来说,是时候抛弃语言成见,重新认识编程开发,取百家之长,完善自己的知识体系。
每种语言都有一些要学习的实用的东西,以及从没碰到的新知识。这对于phper技能进阶尤为重要,通过不同语言的学习去总结编程思想,去印证php学习中的所学所想,会有一种豁然开朗的感觉。
新手学习PHP的避雷针,这些坑在PHP开发中就别跳了的更多相关文章
- 【c#新手学习 练习 案例】 阶段项目一:开发团队调度软件
案例是模仿java https://blog.csdn.net/bjfu170203101/article/details/109322590 改用C#:开发环境 vs2022/vscode .n ...
- c#面向对象基础技能——学习笔记(五)委托技术在开发中的应用
委托 delegate 1.是一种全新的面向对象语言的特性: 2.开发事件驱动程序变得非常简单: 3.简化多线程难度. 理解委托:可以理解成一个方法的指针.(接收的变量是方法) 步骤: 1.声明委托, ...
- 【Java EE 学习 24 下】【注解在数据库开发中的使用】【反射+注解+动态代理在事务中的应用service层】
一.使用注解可以解决JavaBean和数据库中表名不一致.字段名不一致.字段数量不一致的问题. 1.Sun公司给jdbc提供的注解 @Table.@Column.@Id.@OneToMany.@One ...
- javaWeb学习总结(11)- 监听器(Listener)在开发中的应用
监听器在JavaWeb开发中用得比较多,下面说一下监听器(Listener)在开发中的常见应用 一.统计当前在线人数 在JavaWeb应用开发中,有时候我们需要统计当前在线的用户数,此时就可以使用监听 ...
- 适合 JS 新手学习的开源项目——在 GitHub 学编程
作者:HelloGitHub-小鱼干 这里是 HelloGitHub 的<GitHub 上适合新手的开源项目>系列的最后一篇,系列文章: C++ 篇 Python 篇 Go 篇 Java ...
- 新手学习web遇到的一些乱码问题
在新手学习web网站学习的时候经常会遇到?????这种乱码,对于刚起步的菜鸟来说真的很头痛,很容易打击继续学的信心当然了对于菜鸟的我最近也遇到过乱码问题,沉浸其中不能自拔,爱的深啊!!!!!我所遇到的 ...
- ReactNative新手学习之路07ListView_ renderHeader使用StaticContainer
react native新手学习之路07ListView_ renderHeader使用StaticContainer 1.某些特殊场景需要用ScrollView滚动和ListView配合但是不幸运的 ...
- ReactNative新手学习之路01-创建项目开始
新手学习之路01-创建项目开始 小菜鸟准备学习RN开发,决定写下自己的学习历程,方便其他也想要学习RN的人,后期会持续更新写下自己所有学习经历,一步步从菜鸟成长成业内高手.开发环境准备,本文默认环境已 ...
- Python新手学习基础之初识python——与众不同2
看完了Python的缩进,现在来看看Python的标识符.引号和注释. 标识符 关于Python的标识符,其实不是与众不同,只是有一定的规则. 标识符是编程时使用的名字.在Python中,标识符有几点 ...
随机推荐
- PAT (Basic Level) Practice (中文)1070 结绳 (25 分) (优先队列)
给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连.每次串连后,原来两段绳子的长度 ...
- 树hash/树哈希 刷题记录
不同hash姿势: 树的括号序列最小表示法 s[i] 如果i为叶子节点:() 如果i的子节点为j1~jn:(s[j1]...s[jn]),注意s[j]要按照字典序排列
- gitlab 备份和恢复
前言 gitlab这个代码托管工具真是强大,很多东西都是做好了直接用的. 这里就包括备份和恢复功能. 正文 备份 我们可以直接运行此命令,来进行备份. sudo gitlab-rake gitlab: ...
- Django 上下文管理器,为父模板添加动态数据
1.摘要:模板继承可以减少页面内容的重复定义,实现页面内容的重用. 但是当父模板中有动态数据的话,这些动态数据在子模版中是不会显示的.我们可以通过自定义上下文处理器来解决 2.Django上下文处理器 ...
- 题解 P1056 【排座椅】
题目地址:https://www.luogu.com.cn/problem/P1056 题解原地址:https://createsj.blog.luogu.org/solution-p1056 由于题 ...
- qsort 与sort 对结构体排序实例
qsort 与sort 对结构体排序实例 #include<bits/stdc++.h> using namespace std; typedef struct { string book ...
- WPF-命令-基础知识
命令模型的主要元素: 1.命令 2.命令绑定:命令连接到相关的应用程序逻辑 3.命令源:命令源触发命令, 4.命令目标:应用程序逻辑. -------------------------------- ...
- MyEclipse CI 2019.4 完美激活版(含离线包+激活工具+安装教程)
ps:MyEclipse目前已更新至2019.12.5,但是目前还没有有效的激活方式,本次文章以2019.4为例; 该文章使用离线安装的方式进行安装,在线安装不保证不会出现各类小问题,离线安装包及激活 ...
- 使用Xpath爬取酷狗TOP500的歌曲信息
使用xpath爬取酷狗TOP500的歌曲信息, 将排名.歌手名.歌曲名.歌曲时长,提取的结果以文件形式保存下来.参考网址:http://www.kugou.com/yy/rank/home/1-888 ...
- 你不知道的JavaScript下卷
阿喀琉斯之踵 学习编程最好的办法就是编写代码 比较 隐式类型转换 数字和字符串 比较 字符串会隐式转换为数字,再进行比较 == 类型转换 ecma