是否可以为isset()
函数编写替代函数,如果key存在但其值为null,则返回true
我知道php中有array_key_exists但是我在想是否可以通过数组键引用之类的方式来检查
// check if array key set
function issetAK($param){
// some refarance check ?
}
$array = array('some_key'=>null);
issetAK( $array['some_key'] );
有没有人有相同的经验或知道解决这个问题的方法?
当然可以将数组硬编码为全局变量,但这是不可维护的。另一种选择是类:
<?php
class ArrayHelper {
private $array;
public function __construct(array $array) {
$this->array = $array;
}
public function issetAK($param) {
return array_key_exists($param, $this->array);
}
}
$settings = new ArrayHelper(['width' => 200, 'height' => 125, 'ratio' => null]);
var_dump(
$settings->issetAK('width'),
$settings->issetAK('ratio'),
$settings->issetAK('foobar')
);
bool(true)
bool(true)
bool(false)
这是否是对普通array_key_exists($param, $array)
的增强是另一回事。这可能取决于具体的用例和整体应用程序设计。
如果数组键不存在,精确执行$array['some_key']
将触发警告。isset
是一种语言结构(更像一个操作符而不是一个函数),它绕过了这个限制,并且不触发任何错误,即使您执行isset($array['some_key'])
也是如此。只有少数语言结构可以这样做;我想到的是isset
、empty
和??
。
对$array['some_key']
的任何其他使用都将触发警告,并且表达式将产生值null
,这完全违背了目的。因此,array_key_exists
接受两个单独的参数:数组和您正在查找的键的名称。在内部,它能够查找键的存在,通过这种方式,您可以通过编写$array['some_key']
将两个必要的参数传递到函数中,而不会在PHP代码中触发警告。
使用array_key_exists
,句号