【问题标题】:Why is the variable empty inside an if block, but has a value outside of it?为什么变量在 if 块内是空的,但在它之外有一个值?
【发布时间】:2018-08-15 23:09:45
【问题描述】:

我发现了一些我无法解释的东西。 $post_id 设置为9$bookmarks 是一个数组,其中有[5] => true。如果我将die($post_id) 移到此块之外,并且将它放在之前或之后 无关紧要$post_id 将包含9 但在块内既没有类型也没有价值。怎么可能?

if ( !array_key_exists($post_id, $bookmarks) ) {
    $bookmarks[$post_id] = true;
    die($post_id);
}

UPD:我已经编辑了代码,现在应该不会让您感到困惑。

【问题讨论】:

  • 我不明白的是你正在检查它是否 not 在数组中,但想要返回“true”; 为什么?
  • 我认为您正在寻找array_key_existsin_array 将查看值是否在数组中,但看起来您使用 post_id 作为键,值作为布尔值。
  • @FunkFortyNiner 不完全,我检查它是否不在数组中,如果它不存在,我将它添加到数组中。我的意思是它仍然包含9,那我为什么不得到9,只是空白屏幕?
  • 错误报告中的任何内容以及 var_dump() 揭示了什么?
  • 从这段摘录中无法重现。你也不应该检查数组键吗? (in_array 只查找值,没有严格匹配:9=TRUE, DUN DUN DUNNN)

标签: php arrays if-statement logic conditional


【解决方案1】:

die()exit()according to the PHP Manual 相同,exit() 有两种不同的行为:

void exit ([ string $status ] )
void exit ( int $status )

它解释了:

如果status是一个字符串,这个函数打印之前的状态 退出。

如果 status 是一个整数,该值将用作退出状态 并且不打印。退出状态应该在 0 到 254 的范围内, 退出状态 255 由 PHP 保留,不应使用。状态 0 用于成功终止程序。

所以$post_id 是一个整数,die($post_id) 实际上不会打印任何内容,而只会修改进程的退出代码。

您可以通过将die() 重铸为字符串来打印一个数字:

die(strval($post_id));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-24
    • 2019-12-30
    • 2019-06-10
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多