首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何避免isset()和empty()

如何避免isset()和empty()
EN

Stack Overflow用户
提问于 2009-12-25 12:55:19
回答 8查看 23.8K关注 0票数 99

我有几个较旧的应用程序,当在E_NOTICE错误级别上运行时,它们会抛出许多"xyz is undefined“和"undefined offset”消息,因为不会使用isset()和consorts显式检查变量的存在。

我正在考虑通过它们来使它们与E_NOTICE兼容,因为关于丢失变量或偏移量的通知可以是救命稻草,可能会有一些小的性能改进,而且总体上是更干净的方式。

然而,我不喜欢成百上千的isset() empty()array_key_exists()对我的代码造成的影响。它变得臃肿,可读性变差,没有任何价值或意义。

如何在不进行过多变量检查的情况下构建代码结构,同时又与E_NOTICE兼容?

EN

回答 8

Stack Overflow用户

发布于 2009-12-25 13:30:48

只需为此编写一个函数即可。类似于:

代码语言:javascript
复制
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;
    }
}

,您可以将其用作

代码语言:javascript
复制
$username = get_string($_POST, 'username');

get_number()get_boolean()get_array()等琐碎的东西做同样的事情。

票数 37
EN

Stack Overflow用户

发布于 2009-12-25 21:40:58

我认为解决这个问题的最好方法之一是访问GET和POST的值(COOKIE、SESSION等)。通过一个类创建数组。

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

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

票数 13
EN

Stack Overflow用户

发布于 2009-12-25 14:04:31

我和你在一起。但是PHP的设计者犯过比这更严重的错误。除了为任何值读取定义一个自定义函数之外,没有任何方法可以绕过它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1960509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档