代码之家  ›  专栏  ›  技术社区  ›  Rain cheladon

为什么extract不导入负指数?

  •  1
  • Rain cheladon  · 技术社区  · 7 年前

    我在玩提取方法,我注意到它对负指数不起作用。

    让我们以此代码段为例:

    <?php
    
    $arr = [0 => 'faa', 1 => 'fee', -2 => 'foo'];
    $result = extract($arr, EXTR_PREFIX_INVALID, 'var');
    
    echo $var_-2; // Absolutely wrong
    
    ?>
    

    所以我试着这样做:

    echo ${'var_-2'} // Notice: Undefined variable: var_-2
    

    然后根据文件摘录 here

    返回成功导入符号表的变量数

    我做到了:

    echo $result; // 2
    

    似乎提取物没有导入 -2 首先进入符号表。

    文档中没有提到这种行为的确切原因是什么?

    1 回复  |  直到 4 年前
        1
  •  1
  •   Aniket Sahrawat    7 年前

    因为 - 不是根据的有效符号 php variable naming conventions

    以下引文无耻地抄袭自文档:

    变量名遵循与PHP中其他标签相同的规则。有效的变量名以字母或下划线开头,后跟任意数量的字母、数字或下划线。作为正则表达式,它可以这样表示:“[a-zA-Z\ux7f-\xff][a-zA-Z0-9\ux7f-\xff]*”

    // var_-2 results in 0 because of -
    var_dump(preg_match("/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/", "var_-2")); // int(0)
    // var_2 is a valid identifier so result is 1
    var_dump(preg_match("/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/", "var_2")); // int(1)