我正在努力完成一项相当简单的任务。
我正在使用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")