如果value为null,则isset()的php替代函数不返回false

时间:2016-11-04 09:12:44

标签: php arrays

是否有任何为isset()函数编写替代函数的渠道,如果密钥存在但它的值为空则返回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'] );

请求任何经验相同或知道解决方案的人?或任何idias?

2 个答案:

答案 0 :(得分:1)

如果数组键不存在,正好执行$array['some_key']将触发警告。 isset是一种语言结构(更像是一个运算符而不是一个函数),它可以解决这个限制并且会触发任何错误,即使你执行isset($array['some_key'])也是如此。只有少数几种语言结构能够以这种方式运行;我最喜欢的是issetempty??

$array['some_key']的任何其他用法都会触发警告,而表达式将导致值null,这完全违背了目的。因此array_key_exists有两个不同的参数:数组,以及您要查找的键的名称。在内部,它可以查找密钥的存在,这样您就可以将两个必要的参数传递给函数,而不会通过编写$array['some_key']在PHP代码中触发警告。

使用array_key_exists,期间。

答案 1 :(得分:1)

你当然可以将数组硬编码为全局变量,但这是不可维护的。另一种选择是一个类:

<?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)的增强是另一回事。它可能取决于具体的用例和整体应用程序设计。