博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于PHP开发的9条建议
阅读量:4678 次
发布时间:2019-06-09

本文共 3024 字,大约阅读时间需要 10 分钟。

这篇文章主要介绍了关于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.
}

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

转载于:https://www.cnblogs.com/xp796/p/5215491.html

你可能感兴趣的文章
reactor模式:单线程的reactor模式
查看>>
Pair_Work Project
查看>>
good
查看>>
JavaScript之isNaN()函数讲解
查看>>
如何培养自己的管理才能?
查看>>
从App Store上获取已经上架的App版本信息
查看>>
SpringMvc实现日期转换
查看>>
Android稳定性测试之Log分析
查看>>
WPF中使用ObjectDataProvider绑定方法
查看>>
万能数据库查询分析器中文版本《DB查询分析器》几年来在“中关村在线”首次大榜小榜都能够榜上有名...
查看>>
孔明灯-噪点插画
查看>>
类与接口(三)java中的接口与嵌套接口
查看>>
VS关闭Browser Link
查看>>
【题解】山头狙击战
查看>>
USB小白学习之路(3) 通过自定义请求存取外部RAM
查看>>
Solr:通过solr admin对索引库维护<四>
查看>>
mysql写注释的几种方法
查看>>
UPC-2243 军事情报【递推】
查看>>
HTML常用标签查询
查看>>
四方精创前端开发面试经验
查看>>