给初学者的30条PHP最佳实践(荒野无灯)


Posted in PHP onAugust 02, 2011

1,和PHP手册成为好朋友
2,打开Error Reporting
Error reporting 在 PHP 开发时是很有帮助的. 你可以在你代码中发现先前你没有发现的错误,因为并不是所有的BUG都会让程序运行不了的。当产品正式使用时,才有必要关掉错误报告,不然顾客看到一堆奇怪的字符不知道那是什么意思。
3,使用IDE
IDE (集成开发环境,Integrated Development Environments)对于开发者来说是很有帮助的工具.
荒野在这里推荐netbeans IDE 。
4. 试着使用一个PHP 框架
5.学习DRY方法
DRY 代表 Don't Repeat Yourself,它是一个有价值的编程概念,不管是什么语言。DRY编程,顾名思义,是确保你不写多余的代码。
6.使用空格缩进代码来提高可读性
7. “Tier” your Code
给你的应用程序分层,分成不同部位的不同组成部分的代码。这使得您可以轻松地在未来改变你的代码。 如常用的MVC模式。
8. 总是使用 <?php ?>
9.使用有意义的,一致的命名约定
10.注释、注释、注释
11.安装MAMP/WAMP
12.给你的脚本限制运行时间
通常PHP脚本的运行时间被限制为30秒,超过这个时间PHP将抛出一个致命错误。
13.使用OOP
14.知道双引号和单引号的不同
15.不要在网站的根目录放phpinfo()
16.永远不要信任你的用户
17.加密存储密码
Rebuttal:
Keep in mind, however, that MD5 hashes have long since been compromised. They're absolutely more secure than not, but, with the use of an enormous “rainbow table,” hackers can cross reference your hash. To add even more security, consider adding a salt as well. A salt is basically an additional set of characters that you append to the user's string.
18.使用可视化数据库设计工具
如 DBDesigner 和 MySQL Workbench
19.使用输出缓冲
Rebuttal: Though not required, it's generally considered to be a good practice to go ahead and append the “ob_end_flush();” function as well to the bottom of the document. P.S. Want to compress the HTML as well? Simply replace “ob_start();” with “ob_start(‘ob_gzhandler')”;
Refer to this Dev-tips article for more information.

<!DOCTYPE html> 
<?php ob_start('ob_gzhandler'); ?> 
<html lang="en"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>untitled</title> 
</head> 
<body> </body> 
</html> 
<?php ob_end_flush(); ?>

20.保护你的代码避免SQL注射
$username = mysql_real_escape_string( $GET['username'] ); 
$id = $_GET['id']; 
$statement = $connection->prepare( "SELECT * FROM tbl_members WHERE id = ?" ); 
$statement->bind_param( "i", $id ); 
$statement->execute();

By using prepared statements, we never embed the user's inputted data directly into our query. Instead, we use the “bind_param” method to bind the values (and escaping) to the query. Much safer, and, notably, faster when executing multiple CRUD statements at once.
21.尝试ORM (object relational mapping)
ORM libraries for PHP like Propel, and ORM is built into PHP frameworks like CakePHP.
22.缓存数据库驱动页面
如:
// TOP of your script 
$cachefile = 'cache/'.basename($_SERVER['SCRIPT_URI']); 
$cachetime = 120 * 60; // 2 hours 
// Serve from the cache if it is younger than $cachetime 
if (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile))) { 
include($cachefile); 
echo "<!-- Cached ".date('jS F Y H:i', filemtime($cachefile))." -->"; 
exit; 
} 
ob_start(); // start the output buffer 
// Your normal PHP script and HTML content here 
// BOTTOM of your script 
$fp = fopen($cachefile, 'w'); // open the cache file for writing 
fwrite($fp, ob_get_contents()); // save the contents of output buffer to the file 
fclose($fp); // close the file 
ob_end_flush(); // Send the output to the browser

23.使用缓存系统
24.验证Cookie数据
Cookie data, like any data passed on the Web, can be harmful. You can validate cookie data with either the htmlspecialchars() or mysql_real_escape_string().
25.使用静态文件缓存系统
如Smarty的是一个内置缓存的强大的模板系统。
26.分析你的代码
Profiling your code with a tool like xdebug can help you to quickly spot bottlenecks and other potential problems in your PHP code. Some IDEs like Netbeans have PHP profiling capabilities as well.
27.编码标准
如 Pear标准。
28. Keep Functions Outside of Loops
You take a hit of performance when you include functions inside of loops. The larger the loop that you have, the longer the execution time will take. Take the extra time and line of code and place the function outside of the loop.
Editor's Note: Think of it this way. Try to remove as many operations from the loop as possible. Do you really need to create that variable for every iteration of the loop? Do you really need to create the function each time? Of course not.
29.不要复制不额外的变量(事实上这一条值得怀疑,见下面的说明)
如:
$description = strip_tags($_POST['description']); 
echo $description;

可以写成如下:
echo strip_tags($_POST['description']);
Rebuttal: In reference to the comment about “doubling the memory,” this actually is a common misconception. PHP implements “copy-on-write” memory management. This basically means that you can assign a value to as many variables as you like without having to worry about the data actually being copied. While it's arguable that the “Good” example exemplified above might make for cleaner code, I highly doubt that it's any quicker.
也就是说PHP实现“copy-on-write” 的内存管理方式,上面第一种代码并不会存在占用双倍内存的情况。因此Rebuttal严重怀疑第二种方式的代码是否真的比前面的快。
30.更新到最新版本的PHP
31.减少数据库查询次数
32.勇敢地提问
StackOverflow等都是好去处。
PHP 相关文章推荐
加强版phplib的DB类
Mar 31 PHP
PHP 变量类型的强制转换
Oct 23 PHP
创建配置文件 用PHP写出自己的BLOG系统 2
Apr 12 PHP
2014最热门的24个php类库汇总
Dec 18 PHP
PHP采集静态页面并把页面css,img,js保存的方法
Dec 23 PHP
PHPExcel内存泄漏问题解决方法
Jan 23 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
Mar 07 PHP
理解php依赖注入和控制反转
May 11 PHP
Yii2 assets清除缓存的方法
May 16 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
Jun 11 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
Sep 07 PHP
laravel利用中间件做防非法登录和权限控制示例
Oct 21 PHP
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
Aug 02 #PHP
linux下使用ThinkPHP需要注意大小写导致的问题
Aug 02 #PHP
理解和运用PHP中的多态性[译]
Aug 02 #PHP
应用开发中涉及到的css和php笔记分享
Aug 02 #PHP
PHP源代码数组统计count分析
Aug 02 #PHP
linux下为php添加curl扩展的方法
Jul 29 #PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
Jul 29 #PHP
You might like
PHP计算加权平均数的方法
2015/07/16 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
2017/09/26 PHP
PHP使用Redis实现防止大并发下二次写入的方法
2017/10/09 PHP
实例分析基于PHP微信网页获取用户信息
2017/11/24 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
js限制文本框只能输入中文的方法
2015/08/11 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
2015/09/19 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
VUE使用vuex解决模块间传值问题的方法
2017/06/01 Javascript
Bootstrap Table使用整理(五)之分页组合查询
2017/06/09 Javascript
原生js实现密码输入框值的显示隐藏
2017/07/17 Javascript
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
Vue Prop属性功能与用法实例详解
2019/02/23 Javascript
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
python实现给微信公众号发送消息的方法
2017/06/30 Python
python numpy函数中的linspace创建等差数列详解
2017/10/13 Python
Python合并多个Excel数据的方法
2018/07/16 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
2018/12/06 Python
详解python中的time和datetime的常用方法
2019/07/08 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
利用 CSS3 实现的无缝轮播功能代码
2017/09/25 HTML / CSS
来自全球大都市的高级街头服饰:Pegador
2018/01/03 全球购物
卡西欧G-SHOCK英国官网: 防水防震手表
2018/01/08 全球购物
德国网上宠物店:Zoobio
2018/05/23 全球购物
小学教师自我鉴定
2013/11/07 职场文书
精彩的广告词
2014/03/19 职场文书
《鸿门宴》教学反思
2014/04/22 职场文书
学校机关党总支领导班子整改工作方案
2014/10/26 职场文书
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL
Windows10安装Apache2.4的方法步骤
2022/06/25 Servers