微信号:kaifax

介绍:开发者,面向开发者、程序员的专业平台!APP开发、薇信开发、游戏开发、移动开发,各种开发语言(ios/android/c/php/python/ruby/erlang/golang等)、开发工具、开发平台的对接和研究.

一个PHP开发者总结的九条建议

2015-07-26 20:51 开发者

开发者( KaiFaX
面向开发者、程序员的专业平台!


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

1.首要意识:安全

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

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() 这个函数,下面的代码可能会给你一个直观的感受:

<?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 ,但是在这种情况之下我们该怎么处理呢?我们其实可以这样的:

<?phpif (strpos($authors, 'Chris') !== FALSE) { echo 'Chris is an author.';
} else { echo 'Chris is not an author.';
}

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

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

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

if( this condition )
{$x = 5;
}else{$x = 10;

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

$x = 10;if( this condition )
{$x = 5;
}

4.去掉不必要的括号

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

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

其实是可以这样的:

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

你甚至可以这样:

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中有以下几个函数可以达到这个目的:

str_replace() ereg_replace() preg_replace()

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

6.使用三元运算符

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

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

7.使用缓存

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

8.使用框架

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

9.用isset()代替strlen()

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

<?phpif (isset($username[5])) { // The username is at least six characters long.}if (strlen($username) >= 6) { // The username is at least six characters long.}

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


原文来自:https://jellybool.com/post/9-things-that-php-developer-should-know-abo...

作者:JellyBool


1. 回复“m”可以查看历史记录;

2. 回复“h”或者“帮助”,查看帮助;


开发者: KaiFaX
面向开发者、程序员的专业平台!



微信群请加小编私人微信:13511421494



 
开发者 更多文章 Sirius —— 开源版的 Siri ,由 Google 支持,BSD 开源许可证 百度统计js被劫持用来DDOS Github 用JavaScript开发移动原生应用,Facebook正式开源React Native! 042 | 8-Bit哲学,用电子游戏令人变聪明 换个思维,结果就在拐角处(4个经典案例)
猜您喜欢 人工智能时代很快就要到来,给计算机喂食各种知识成为可能 黑客是如何发现女朋友出轨的 产品经理 vs PhD 为什么我要选择用Yarn来做Docker容器调度引擎 你为什么会离开游戏行业?