【问题标题】:PHP 5.4 - Variable defined by string and it's value set to NULL is not definedPHP 5.4 - 由字符串定义且其值设置为 NULL 的变量未定义
【发布时间】:2015-05-17 10:08:47
【问题描述】:

谁能告诉我为什么string定义的变量不存在?

$string = 'variable';
${$string} = NULL;

echo $variable;

变量 $variable 未定义。

【问题讨论】:

  • 来自手册:Returns TRUE if var exists and has value other than NULL, FALSE otherwise. isset
  • 可以,但是为什么变量不存在?
  • @KrzysztofTrzos ^ 你读了吗? 并且具有 NULL 以外的值你的变量是 NULL,所以它是假的
  • 我知道 ISSET 的工作原理。我只想知道为什么没有定义变量,当我按照我展示的方式定义它时?
  • 因为null 是不存在的值

标签: php php-5.4


【解决方案1】:

根据documentation

isset — 确定变量是否已设置并且不是 NULL

由于您将变量设置为 NULL 像

$string = 'variable';
${$string} = NULL;

它将返回 false

【讨论】:

    【解决方案2】:

    正如其他人所指出的,isset() 检查变量是否已设置并且不是null

    如果要检查变量是否已定义,包括设置为null 的变量,可以使用 get_defined_vars() 获取列表定义的变量并检查变量名是否存在:

    $string = null;
    $string2 = '';
    
    var_dump(array_key_exists('string', get_defined_vars())); // bool(true)
    var_dump(array_key_exists('string2', get_defined_vars())); // bool(true)
    var_dump(array_key_exists('string3', get_defined_vars())); // bool(false)
    

    【讨论】:

      【解决方案3】:

      PHP 中未定义的变量的值为 NULL,因此:

      ${$string} == $variable;
      ${$string2} == $variable2;
      
      ${$string2} == $variable2 == 'value'; // so isset returns TRUE
      $variable == NULL; // so isset returns FALSE
      ${$string} == $variable == NULL; // so isset returns FALSE
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-05
        • 2019-11-20
        • 1970-01-01
        • 1970-01-01
        • 2020-02-29
        • 2021-03-19
        • 2014-12-04
        相关资源
        最近更新 更多