为什么提取物不导入负指数?

时间:2018-03-20 03:55:15

标签: php extract extraction

我正在使用提取方法,我发现它不会对负指数起作用。

我们以此代码段为例:

<?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 个答案:

答案 0 :(得分:1)

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

以下引用无耻地从文档中复制:

  

变量名遵循与PHP中其他标签相同的规则。有效的变量名称以字母或下划线开头,后跟任意数量的字母,数字或下划线。作为正则表达式,它将表达为:'[a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ 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)