新手学习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中,标识符有几点 ...
随机推荐
- LIS 51Nod 1134 最长递增子序列
给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递增的) 例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10. Input 第1行:1个 ...
- Android中的内存管理机制以及正确的使用方式
概述 从操作系统的角度来说,内存就是一块数据存储区域,属于可被操作系统调度的资源.现代多任务(进程)的操作系统中,内存管理尤为重要,操作系统需要为每一个进程合理的分配内存资源,所以可以从两方面来理解操 ...
- 点击按钮出现60秒倒计时,JS(按钮)
<script type="text/javascript"> var countdown=60; function settime(val) { var e = $( ...
- oracle建数据库
oracle用户界面登陆 用户要切换到oracle sqlplus / as sysdba //sys用户是oracle的最高管理员所以要加上as help index //查看命令列表,sql中不区 ...
- java字符串操作扩充:灵活截取字符串
java字符串操作扩充:灵活截取字符串 public class StringUtil { static int varlen1; static int varlen2; static String ...
- RYU安装教程
一.使用pip的形式安装RYU 1.首先检查ubuntu中是否存在pip,命令为 sudo pip3 --version 2.如果存在则使用默认版本8.1.1就行不必跟新,否则自己下载一个pip 3. ...
- 使用yum安装报错:[Errno 256] No more mirrors to try
背景:我使用yum方式安装软件时,比如zabbix这种软件,我们在安装时一般都是直接到zabbix官网,按照官方的步骤进行安装,但是有一个问题,官方的服务器不在国内,时常会在安装时导致超时报错.此时解 ...
- [HNOI2013] 消毒 - 二分图匹配
容易发现 \(a,b,c\) 中至少有一个 \(\leq 17\) 不妨将其调剂为 \(a\),那么我们可以暴力枚举哪些 \(x\) 片片要被直接削掉,剩下的拍扁成二维情况 二维时,如果有一个格子是 ...
- MySQL8.0.11解压版安装详细教程
1. 从官网下载zip包 官网网址(https://dev.mysql.com/downloads/mysql/) 2. 解压 将压缩包解压到一个目录(后续将此目录作为安装目录),我这里是解压到了D: ...
- Response与ServletContext对象
HTTP协议: 请求消息:客户端发送给服务器端的数据 数据格式: 请求行: 格式: 请求方式 请求url 请求协议/版本 请求头:告诉服务器,当前访问的浏览器自身的一些信息 格式: 请求头名称: 请求 ...