我试图弄清楚EXTR_PREFIX_IF_EXISTS
函数中extract()
标志的行为。但是,当我运行代码时,它向当前符号表添加了超出所需数量的变量(本例中为两个),如以下行所示:输出表明添加了三个变量而不是两个变量,并且存在变量“ key3”。现在,我无法弄清楚是什么原因导致了这种行为,或者我是否误解了这个概念。我是PHP新手。任何帮助将不胜感激。
我的代码:
$key1 = 'old';
$key2 = 'old';
$my_array = array (
'key1' => 'new value1',
'key2' => 'new value2',
'key3' => 'new value3'
);
$num = extract ($my_array, EXTR_PREFIX_IF_EXISTS, "prefixed");
echo "variables added:$num<br />"; //number of variables imported to symbol table
echo isset($key1) ? 'TRUE': 'FALSE';
echo "<br />";// true
echo isset($prefixed_key3) ? 'TRUE': 'FALSE';
echo "<br />";
echo isset($key3) ? 'TRUE': 'FALSE';// should output false
输出:
添加的变量:3
是
假
是
答案 0 :(得分:1)
EXTR_PREFIX_IF_EXISTS
表示在发生名称冲突时,先将现有变量名加前缀,然后再将变量提取到作用域中;如果没有冲突,则创建一个新变量。在您的情况下,您没有在任何地方定义$Key3
在extract
函数之前,因此实际行为是完全正常的...
在您的代码提取中,实际上是这样进行的:
循环遍历数组,并检查变量是否已存在。如果存在,根据您的标志,创建一个名为prefix+_+the existing name
的新变量。
在您的情况下,您已经在使用$key1 and $key2
之前定义了extract
,所以创建了两个带有前缀名称的变量,但是正如已经说过的,变量$key3
在extract
之前是未定义的,因此它还有一个没有前缀的变量。这样可以使添加的变量数正确(在您的情况下为 3 )。