如果值为null, isset()不返回false的PHP替代函数


php alternative function for isset() to not return false if value is null

是否可以为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'])也是如此。只有少数语言结构可以这样做;我想到的是issetempty??

$array['some_key']的任何其他使用都将触发警告,并且表达式将产生值null,这完全违背了目的。因此,array_key_exists接受两个单独的参数:数组和您正在查找的键的名称。在内部,它能够查找键的存在,通过这种方式,您可以通过编写$array['some_key']将两个必要的参数传递到函数中,而不会在PHP代码中触发警告。

使用array_key_exists,句号