PHP-【讨论】如何避免PHP开发中常见的编程错误习惯?

PHP-【讨论】如何避免PHP开发中常见的编程错误习惯?

浮生未歇 发布于 2017-03-03 字数 490 浏览 974 回复 7

我们在开发PHP程序时,有时会遇到各种各样奇怪的错误,很多错误都是由于不良的编程习惯引起的。
比如:
1、echo $array[key]
2、echo $array[$not_exist_key]
以上两者都会报一个notice级别的错误。
第一个的错误在于PHP不知道key是常量还是字符串,但它会先默认作为常量使用,常量表中没有再作为字符串使用;第二个的错误在于直接使用了一个数组中不存在的键。

除了这些之外,大家还有别的需要避免的编程习惯吗?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

夜无邪 2017-11-08 7 楼

1、error_reporting没打开,有很多人不打开最后自己在找错误,找半天没找到。
2、永远不要相信客户提交的数据,可以用格式化函数进行处理,比如ID可以intval($_POST['id'])一下。
3、有时候我们一个php页面上会有两个相同的变量名,造成后者覆盖掉前者的值,这很可能是随便给变量起名引起的(比如我们经常会赋值给一个$res变量),这样就会造成莫名的数据对不上的情况。所以我们在写变量名的时候一定要赋予其意义,当成是给自己的后代命名一样。
4、自定义函数要返回可以判断其是否执行成功的结果,比如:return is_array($res) ? $res : NULL;函数执行之后判断其是否成功,如果成功才继续往下,不成功再写个其他的方法执行。比如:file_put_contents();如果返回为false,我们应该要有相应的措施去补救,而不要造成文件写入失败。

泛泛之交 2017-07-31 6 楼

这些是新手常见问题,这些东西很简单,多动手就是王道,打代码多了就自然养成习惯了。

夜无邪 2017-07-14 5 楼

对数组,可以使用如下函数取值

 function val($arr, $name, $default = null)
{
<coding-2 lang="other">
return isset($arr[$name]) ? $arr[$name] : $default;
}

function getName($name, $default = null)
{
<coding-3 lang="other">
return isset($_REQUEST[$name]) ? $_REQUEST[$name] : $default;
}

可以 避免 键不存在的提示 对 sql , 对参数值必须做 quote 编码

错误级别设置:
/**
* 如果要集成第三方的 PHP 库,错误报告也许要修改为:
*
* error_reporting(E_ALL & ~(E_STRICT | E_NOTICE));
*/
error_reporting(E_ALL | E_STRICT);

夜无邪 2017-05-21 4 楼

1、对POST、GET提交过来的数据进行处理,比如用trim去掉前后空格。

2、对数组进行循环或操作数据库时,首先要判断数据是否为空和数组key是否存在。

3、常量最好用大写。

4、对数据库操作时,where条件最好加单引号及大括号,比如 where id='{$id}' and username='{$username}'( 外围用双引号,eg:$sql = "UPDATE users SET hits=hits+1 WHERE id='{$id}' and username='{$username}'"; )

甜柠檬 2017-05-16 3 楼

编程习惯只能自己注意了,写法上的不一样能一定程度的避免出错,但是总归你还是得自己注意,没法偷懒,自己写一个编码规范,严格按照规范走,时间长了这些基本的问题就不会有了

归属感 2017-04-19 2 楼

1.项目跑起来notice级别的错误都是不显示的。
2.项目开发版本打开所有的级别的错误输出。
3.最好的习惯使用前定义变量。

根据自己预想的变量类型赋予初始值。
egg:$note_exist_key='';$array = array();echo $array[$note_exist_key];

4.单双引号的使用也要注意。

egg:sql语句拼写,接收一个name变量
$sql = 'select * from user where name=$name';
最靠谱的办法
使用双引号
$sql = "select * from user where name={$name}";

5.数组也很需要注意的地方

 $users = $db->getAll($sql);
foreach($user as $key=>$user) {
//do something
}
//正确做法:
if($users) {do array by $users}
if(!empty($users)) {do array by $users}

这里有可能遇到数据为空的情况。
类似貌似还有很多。有空回顾手册,对代码严谨性还是很有帮助的。

泛泛之交 2017-03-17 1 楼

1、语法结构的不完整性,switch结构忘记了default,if...elseif忘记了最后的else;
2、使用'@'符号来屏蔽错误;
3、滥用数组;