我有几个较旧的应用程序,当在E_NOTICE错误级别上运行时,它们会抛出许多"xyz is undefined“和"undefined offset”消息,因为不会使用isset()
和consorts显式检查变量的存在。
我正在考虑通过它们来使它们与E_NOTICE兼容,因为关于丢失变量或偏移量的通知可以是救命稻草,可能会有一些小的性能改进,而且总体上是更干净的方式。
然而,我不喜欢成百上千的isset()
empty()
和array_key_exists()
对我的代码造成的影响。它变得臃肿,可读性变差,没有任何价值或意义。
如何在不进行过多变量检查的情况下构建代码结构,同时又与E_NOTICE兼容?
发布于 2009-12-25 13:30:48
只需为此编写一个函数即可。类似于:
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()
等琐碎的东西做同样的事情。
发布于 2009-12-25 21:40:58
我认为解决这个问题的最好方法之一是访问GET和POST的值(COOKIE、SESSION等)。通过一个类创建数组。
为每个数组创建一个类,并声明__get
和__set
方法(overloading)。__get
接受一个参数,它将是一个值的名称。此方法应使用isset()
或empty()
在相应的全局数组中检查该值,如果该值存在,则返回该值,否则返回null
(或其他一些默认值)。
之后,您可以放心地以这种方式访问数组值:$POST->username
,并在需要时执行任何验证,而无需使用任何isset()
或empty()
。如果相应的全局数组中不存在username
,则将返回null
,因此不会生成任何警告或通知。
发布于 2009-12-25 14:04:31
我和你在一起。但是PHP的设计者犯过比这更严重的错误。除了为任何值读取定义一个自定义函数之外,没有任何方法可以绕过它。
https://stackoverflow.com/questions/1960509
复制相似问题