这篇文章主要介绍了关于PHP开发的9条建议,都是个人的一些经验总结,有需要的小伙伴可以参考下。

本文只是个人从实际开发经验中总结的一些东西,并不是什么名言警句,写出来有两个目的:一是时刻提醒自己要按照这些知识点来写自己代码,二是为了分享,说不定对你有用呢?万一,是吧。。。

1.首要意识:安全

大多数时候,我们开发的Web程序都是需要跟数据库打交道的,所以这里几乎可以说SQL注入是一个怎么也无法避免要拿出来讨论一下的问题。而且近年 来像XSS和CSRF攻击也变得大行其道,使得"黑客"们貌似又有了一把把利器,而我们总是处于被动的状态。不过我们要记得是下面这两个原则:

1. 永远不要相信用户输入的东西。(老话了,但这是真的)
2. 将自己需要输出的数据进行转义。

简单来说就是:filter input , escape output

如果你是新手,不要再使用类似以下的查询语句了:

SELECT FROM users WHERE username = $_POST['username'] AND password = $_POST['password'];

还有就是,使用PDO或Mysqli吧,不要再使用老式的mysql操作了。

而对于,CSRF的解决方案,目前接触的都是给每一次的表单提交都设置一个token值,然后在表单提交的时候校验之即可。

2.明确地知道各个比较操作符的差别

PHP的比较操作符,这其实可以说是一个很小的注意点,但是在某些时候真的很重要。比如说很多时候我们得考虑清楚,该用==还是===,如果你使用过strpos()这个函数,下面的代码可能会给你一个直观的感受:

1
2
3
4
5
6
7
8
9
<?php
 
$authors = 'Chris & Sean';
 
if (strpos($authors, 'Chris')) {
  echo 'Chris is an author.';
} else {
  echo 'Chris is not an author.';
}

上面这段代码的运行结果其实是输出Chris is not an author,但是现实情况是,Chris &
Sean真的是Author啊,怎么回这样呢?其实是这样的:Chris正好出现在Chris &
Sean首位开始处,也就是0这个位置,所以substr()返回了,由于条件判断语句中bool判断,所以0作为了false处理,于是程序输出了
Chris is not an author,但是在这种情况之下我们该怎么处理呢?我们其实可以这样的:

1
2
3
4
5
6
7
<?php
 
if (strpos($authors, 'Chris') !== FALSE) {
  echo 'Chris is an author.';
} else {
  echo 'Chris is not an author.';
}

这里的!==和!=的不同就体现出来了。

3.可以减少使用else就少使用else

这个貌似从我一开始接触编程就有的一个想法,因为每次看到if(){}else{}就有一种这一段其实可以写得更好的感觉,因为一旦你减少了使用
else关键字,你得代码会减少两行!没错,两行也是我们的追求,而且,从我的经验看,else少的代码貌似可读性更高,对我来说。

1
2
3
4
5
6
7
if( this condition )
{
$x = 5;
}
else
{
$x = 10;

如果,在$x的默认值是10,还是下面这样写感觉比较好:

1
2
3
4
5
$x = 10;
if( this condition )
{
$x = 5;
}

4.去掉不必要的括号

这里的目的其实跟else关键字部分是一样的,我们是为了更简短的代码和更优越的可读性,对以下的情况,你都应该考虑优化代码:

1
2
3
if ($gollum == 'halfling') {
$height --;
}

其实是可以这样的:

1
if ($gollum == 'halfling') $height --;

你甚至可以这样:

1
2
3
4
5
6
7
8
if ($gollum == 'halfling') $height --;
else $height ++;
 
if ($frodo != 'dead')
echo 'Gosh darnit, roll again Sauron';
 
foreach ($kill as $count)
echo 'Legolas strikes again, that makes' . $count . 'for me!';

是不是有一种又短又清晰的感觉?

5.多用str_replace()

在很多时候我们需要对一些字符串进行替换,在PHP中有以下几个函数可以达到这个目的:

1
2
3
str_replace()
ereg_replace()
preg_replace()

如果你确实是需要使用正则匹配,那就使用preg_replace(),而如果在可实现替换的情况下,请使用str_replace(),因为据不完全统计,str_replace()的效率在这三个当中是最高的。

6.使用三元运算符

这个可能很多人都有这个感受,使用三元运算符之后,我们可以去掉一堆if else语句了,代码又短又爽。

1
$host = strlen($host) > 0 ? $host : htmlentities($host);

7.使用缓存

目前PHP热门的缓存技术可能就是Redis和Memcached了,在PHP的官方文档中,也有Memcached的使用教程,至于Redis,我最近在研究中,后续会给出一些教程,如果一切顺利的话。

8.使用框架

框架的好处很多,可能是在性能方面有所损失外,貌似找不到不用框架的理由了,框架即可以加快你的开发速度,也可以让你在写代码的过程中撸的舒舒服
服,而且想很多安全问题,你都会得到很好的解决。我这里首推Laravel,不过像Yii2 Slim
Symfony都是非常棒的框架,除了Symfony没有尝过过之外,剩下的三个我都有使用经历,最后就基本是用Laravel了。不过我建议的
Laravel可能不适合你,这还是得看个人喜好。

9.用isset()代替strlen()

如果你需要在项目代码中需要根据一个字符串的长度来做条件判断,这个时候非常推荐你直接使用isset(),因为在同等条件之后,isset()的速度是strlen()的五倍左右,所以:

1
2
3
4
5
6
7
8
9
10
<?php
 
if (isset($username[5])) {
  // The username is at least six characters long.
}
 
 
if (strlen($username) >= 6) {
  // The username is at least six characters long.
}

以上的两个条件判断都是可以达到相同的目的,但是我推荐使用的是第一种。

关于PHP开发的9条建议的更多相关文章

  1. 从零开始学 iOS 开发的15条建议

    事情困难是事实,再困难的事还是要每天努力去做是更大的事实. 因为我是一路自学过来的,并且公认没什么天赋的前提下,进步得不算太慢,所以有很多打算从零开始的朋友会问我,该怎么学iOS开发.跟粉丝群的朋友交 ...

  2. C++编程开发学习的50条建议(转)

    每个从事C++开发的朋友相信都能给后来者一些建议,但是真正为此进行大致总结的很少.本文就给出了网上流传的对C++编程开发学习的50条建议,总结的还是相当不错的,编程学习者(不仅限于C++学习者)如果真 ...

  3. IOS开发-提升app性能的25条建议和技巧

    前言 这篇文章介绍了作者开发工作中总结的25个iOS开发tips, 多年之前读过这篇文章.收益良多,基本每一个tips在我的应用开发过程中都使用过.今天把这篇文章又一次整理转发下,与大家一起学习,不论 ...

  4. 将Web应用性能提高十倍的10条建议

    导读 提高 web 应用的性能从来没有比现在更重要过.网络经济的比重一直在增长:全球经济超过 5% 的价值是在因特网上产生的(数据参见下面的资料).这个时刻在线的超连接世界意味着用户对其的期望值也处于 ...

  5. Android APP高效开发的十大建议

    在使用Android开发APP过程中,为什么确保最优化.运行流畅且不会使Android系统出现问题至关重要呢?因为影响APP产品效率的每一个问题,如:耗电或内存占用情况等,都是关乎APP成功与否关键因 ...

  6. 将 Web 应用性能提高十倍的10条建议

    提高 web 应用的性能从来没有比现在更重要过.网络经济的比重一直在增长:全球经济超过 5% 的价值是在因特网上产生的(数据参见下面的资料).这个时刻在线的超连接世界意味着用户对其的期望值也处于历史上 ...

  7. MySQL 数据库开发的 36 条军规

    MySQL 数据库开发的 36 条军规 写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒过. (一)核心军规 (1)不在数据库做运算:cpu计算务必移至业务层 ...

  8. 10条建议帮助你创建更好的jQuery插件

    本文总结了帮助你创建更好jQuery插件的10条建议.分享给大家供大家参考.具体说明如下: 在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就 ...

  9. 关于Java代码优化的44条建议!

    关于Java代码优化的N条建议! 本文是作者:五月的仓颉 结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化.在修改之前,作者的说法是这样的: 就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼 ...

随机推荐

  1. 监听iOS检测屏幕旋转状态,不需开启屏幕旋转-b

    -(void)rotation_icon:(float)n { UIButton *history_btn= [self.view viewWithTag:<#(NSInteger)#>] ...

  2. #ifndef#define#endif的用法-b

    The special operator defined is used in #if and #elif expressions to test whether a certain name is ...

  3. Phonegap之内存问题

    使用phonegap的拍照功能时,安卓机会出现崩溃现象,这一问题的原因也许是你的手机内存不足,实际上却不是phonegap的问题,它也是原生android apps的一个普遍问题. 产生这一问题是因为 ...

  4. Android引导界面

    一.所需素材       很有必要整理一下,里面附带友盟的社会化分享组件,我就不去掉了. 二.代码 import com.umeng.update.UmengUpdateAgent; import a ...

  5. BZOJ 3707: 圈地 计算几何

    Description 2维平面上有n个木桩,黄学长有一次圈地的机会并得到圈到的土地,为了体现他的高风亮节,他要使他圈到的土地面积尽量小.圈地需要圈一个至少3个点的多边形,多边形的顶点就是一个木桩,圈 ...

  6. 中断服务程序(Interrupt Service Routines,ISR)注意事项

    转自ISR之不能做什么 中断是嵌入式系统中重要组成部分,很多编译器开发商都让标准c支持中断,并引入关键字_interrupt.但是: 1.ISR不能有返回值: 2.ISR不能传递参数: 3.ISR应该 ...

  7. 《鸟哥的Linux私房菜》读书笔记三

    1.在Linux系统中,每个设备都被当成一个文件来对待,每个设备都会有设备文件名.比如 IDE接口的硬盘文件名为/dev/hd[a-d] 括号内的字母为a-d当中任意一个,即/dev/hda,/dev ...

  8. Android ListView中 每一项都有不同的布局

    实现代码 Adapter的代码 其中:ViewHolder分别是三个不同的布局,也就是ListView中每一项的布局 TYPE_1...是三种类型. 在使用不同布局的时候,getItemViewTyp ...

  9. FindBugs

    FindBugs是一个能静态分析源代码中可能会出现Bug的Eclipse插件工具. 可以从http://sourceforge.net/project/showfiles.php?group_id=9 ...

  10. C#简单多线程使用(同步和优先权)

    题目: 麦当劳有两个做汉堡的厨师(工号:11,12)和三个销售人员(工号:21,22,23). 厨师生产汉堡,并负责将做好的汉堡放入货架,货架台大小有限,最多放6个汉堡,11和12不能同时往货架台上放 ...