检查变量是否为true, false,如果没有设置为null


Check if variable is true, false, set null if nothing

我正在努力完成一项相当简单的任务。

我正在使用REST后端,有时会接收json对象作为参数,如"api?params ={}"foo":酒吧"。"foo"可以为真/假或null(未定义)。

当我回显myParam(foo)为true时,它回显"true"。当foo为false时,它不返回任何东西(我希望它回显"false"),但是当foo没有定义时,当它不在api调用中时,我希望它返回"null"。

很久以前我在网上找到了一个片段,我认为它是有效的。

$foo = (null !== $jsonObj->foo ? $jsonObj->foo: "");

但是当foo为false或null时不起作用。

$foo = var_export($jsonObj->foo, true);

这一行返回变量作为字符串,并返回它"正确",当为真时返回"true",当为假时返回"false",当为空时返回"NULL"。这个我可以用

switch ($foo) {
    case "true":
         $result = true;
         break;
      ...

但是,一定有更好的方法吗?对吧?

——

我现在的解决方案是这样的:(由于我将值存储在数组中,因此存储false将等于")

$foo = is_null($jsonObj->foo) ?$jsonObj->foo;

这给了我foo = null如果null/undefined,否则true/false…

然后将其存储在数组中,我使用了:

$array["foo"] = (!is_null($foo) ?interval ($foo): null;

这将其存储为0/1或",如果它是空的,那么我有3个状态可以使用。

但是看了你所有的评论让我尝试最好的解决方案。

可以使用php isset()函数

。:

if (!isset($foo)) {
    echo "foo is not set : ";
    var_dump($foo);
    echo "<br />";
}
// returns "foo is not set : NULL"

$foo = NULL;
if (!isset($foo)) {
    echo "foo = NULL : ";
    var_dump($foo);
    echo "<br />";
}
// returns "foo = NULL : NULL"

$foo = false;
if (isset($foo)) {
    echo "foo = false : ";
    var_dump($foo);
    echo "<br />";
}
// returns "foo = false : bool(false)"

$foo = true;
if (isset($foo)) {
    echo "foo = true : ";
    var_dump($foo);
}
// returns "foo = true : bool(true)"

希望能有所帮助。

我猜你把一个包含"true"的字符串和一个真正的布尔值"true"混淆了。

始终使用var_dump来确保变量的正确类型。var_dump($jsonObj->foo)

这将显示准确的类型。

所以如果它是一个字符串,你必须检查类似的东西(你已经在switch)

if($jsonObj->foo == "true")