首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在if条件中时,json_decode返回1

在if条件中时,json_decode返回1
EN

Stack Overflow用户
提问于 2013-05-16 04:20:27
回答 4查看 628关注 0票数 0

这是我的代码:

代码语言:javascript
复制
if(
    $jsonObj = json_decode($someJson) &&
    json_last_error() == JSON_ERROR_NONE
) {

    print_r($jsonObj);
}

输出为1。另一种编写方式:

代码语言:javascript
复制
$jsonObj = json_decode($someJson);

if(
    $jsonObj &&
    json_last_error() == JSON_ERROR_NONE
) {

    print_r($jsonObj);
}

输出是一个stdClass (我想要的)。

为什么第一个代码块和第二个代码块的工作方式不一样?也许只要写成这样就可以了?:

代码语言:javascript
复制
$jsonObj = json_decode($someJson);

if(json_last_error() == JSON_ERROR_NONE) {

    print_r($jsonObj);
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-16 04:24:01

这一点:

代码语言:javascript
复制
$jsonObj = json_decode($someJson) && json_last_error() == JSON_ERROR_NONE

意思是:

代码语言:javascript
复制
$jsonObj = (json_decode($someJson) && json_last_error() == JSON_ERROR_NONE)

这就是:

代码语言:javascript
复制
$jsonObj = ($somenonemptyvar && true)

所以,$jsonObj就是true

您可能想要使用:

代码语言:javascript
复制
($jsonObj = json_decode($someJson)) && json_last_error() == JSON_ERROR_NONE

还有一些读物:operator precedence

不过,您的第二个建议可以很好地工作,特别是如果值不正确(0,NULL,false,empty array...)是您的json_decode的有效结果。

票数 1
EN

Stack Overflow用户

发布于 2013-05-16 04:23:26

因为operator precedence。布尔型AND (&&)比赋值(=)具有更高的优先级,因此第一个语句有效:

代码语言:javascript
复制
$jsonObj = (json_decode($someJson) && json_last_error() == JSON_ERROR_NONE)

您需要添加括号以获得您想要的结果:

代码语言:javascript
复制
($jsonObj = json_decode($someJson)) && json_last_error() == JSON_ERROR_NONE
票数 7
EN

Stack Overflow用户

发布于 2013-05-16 04:26:22

这是因为相对于逻辑运算符,=的优先级较低:

代码语言:javascript
复制
if (
    $jsonObj = json_decode($someJson) &&
    json_last_error() == JSON_ERROR_NONE
)

是:

代码语言:javascript
复制
if ($jsonObj = json_decode($someJson) && json_last_error() == JSON_ERROR_NONE)

其中分组为:

代码语言:javascript
复制
if ($jsonObj = (json_decode($someJson) && json_last_error() == JSON_ERROR_NONE))

所以这个逻辑条件:

代码语言:javascript
复制
json_decode($someJson) && json_last_error() == JSON_ERROR_NONE

首先进行求值(结果TRUE,由1表示)。然后,将结果赋值给成为1$jsonObj。最后,计算if子句。

你的第一个版本实际上相当于:

代码语言:javascript
复制
$jsonObj = (json_decode($someJson) && json_last_error() == JSON_ERROR_NONE);
if ($jsonObj) {
    //....
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16574250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档