为了账号安全,请及时绑定邮箱和手机立即绑定

如何避免isset()和empty()

如何避免isset()和empty()

PHP
三国纷争 2019-09-19 15:24:42
我有几个较旧的应用程序,当在E_NOTICE错误级别上运行时会抛出大量“xyz未定义”和“未定义的偏移”消息,因为没有使用isset()和consorts 显式检查变量的存在。我正在考虑通过它们来使它们与E_NOTICE兼容,因为关于缺失变量或偏移的通知可以是救生员,可能会获得一些微小的性能改进,并且它总体上更清洁。但是,我不喜欢对我的代码造成数百isset() empty()和array_key_exists()s的影响。它变得臃肿,变得不那么可读,没有在价值或意义上获得任何东西。如何在没有过多变量检查的情况下构建代码,同时还兼容E_NOTICE?
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

只需为此编写一个函数。就像是:


function get_string($array, $index, $default = null) {

    if (isset($array[$index]) && strlen($value = trim($array[$index])) > 0) {

        return get_magic_quotes_gpc() ? stripslashes($value) : $value;

    } else {

        return $default;

    }

}

你可以用作


$username = get_string($_POST, 'username');

做同样的琐碎的东西一样get_number(),get_boolean(),get_array()等等。


查看完整回答
反对 回复 2019-09-19
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

我相信解决这个问题的最佳方法之一是通过类访问GET和POST(COOKIE,SESSION等)数组的值。


为每个数组创建一个类,声明__get和__set方法(重载)。__get接受一个参数,它将是一个值的名称。此方法应使用isset()或检查相应全局数组中的此值,empty()如果存在,则返回该值,否则返回null(或某些其他默认值)。


之后,您可以以这种方式自信地访问数组值:$POST->username如果需要,可以在不使用任何isset()s或empty()s的情况下进行任何验证。如果username在相应的全局数组中不存在null则将返回,因此不会生成警告或通知。


查看完整回答
反对 回复 2019-09-19
  • 3 回答
  • 0 关注
  • 377 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信