我一直在我的各种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()
只能在一个级别上工作。
不管是什么解释,我最终恢复了一堆代码。:-(