php在写函数时要对每个传人参数的类型都严格检查吗?
黄舟
黄舟 2017-04-11 09:40:03
[PHP讨论组]

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

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(2)
大家讲道理

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注入就好.

怪我咯

如果是自己的项目自己写函数自己用,这种情况下可以不用每个地方都做检查,而涉及到团队协作或者提供类库给其他人用的情况,就需要做好类型检查,提供完整的文档了。其实有了准确的文档或者函数注释就足够了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号