我一直在我的各种Cgiapp类中进行参数测试,其中一个看起来非常巧妙的测试如下:
if (!array_key_exists('some_string', $_REQUEST)) {
// some error
}
看起来很简单:$_REQUEST是一个关联数组,我想测试其中是否存在键。当然,我可以使用isset(),但它看起来……丑陋、冗长,而且浪费按键,尤其是当我使用param()方法时:
if (!isset($_REQUEST[$this->param('some_param')])) {
// some error
}
但是,我遇到了一个陷阱:当涉及到array_key_exists()时,$_REQUEST不完全是一个数组。我认为发生的事情是$_REQUEST实际上是几个其他数组的超集—$_POST、$_GET和$_COOKIE—和isset()有一些在各种键之间下降的逻辑,而array_key_exists()只能在一个级别上工作。
不管是什么解释,我最终恢复了一堆代码。:-(
