php在写函数时要对每个传人参数的类型都严格检查吗?

查看:87
本文介绍了php在写函数时要对每个传人参数的类型都严格检查吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

php7之前尚不完全支持type hint,所以,如果你期望给你传入一个integer,并把它当做integer处理(比如进行<,>的比较),然而实际传入了一个string,这样这个string就会被静默地转换为integer并不做任何警告(也许就会产生bug)。然而如果在每个函数内手动审查type,不免非常臃肿,而且我看到这样做的也并不多。请问大家怎么看这个问题呢?

解决方案

PHP提供有变量处理函数(如is_int/is_float/is_string/is_array/is_object/instanceof)来检查变量类型.对于程序提示用户输入错误的场景,如提交表单,用这些函数很有必要,也很方便.

而且判断一下类型,也不会显得"非常"臃肿:

function sum($a, $b) {
    if(!is_int($a) || !is_int($b)) return false;
    return $a + $b;
}
var_export(sum(1, 2.2));

另外不是所有地方都需要进行变量类型检查,比如post.php?id=1024:

--当前文章内容
SELECT * FROM posts WHERE id = 1024;
--上一篇
SELECT * FROM posts WHERE id < 1024 ORDER BY id DESC LIMIT 1 OFFSET 0;
--下一篇
SELECT * FROM posts WHERE id > 1024 ORDER BY id ASC  LIMIT 1 OFFSET 0;

上面涉及到了等于/小于/大于的逻辑判断,$_GET['id']这个参数不需要用户输入,完全是程序的输出行为,这时完全不需要因为用户有可能故意把参数修改成字符串而进行一次类型检查.程序只需把参数视为int型,预处理查询时把参数绑定为int型,避免SQL注入就好.

这篇关于php在写函数时要对每个传人参数的类型都严格检查吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆