Почему экстракт не импортирует отрицательные индексы?

Я играл с методом извлечения и заметил, что он не работает с отрицательными показателями.

Давайте возьмем этот фрагмент кода в качестве примера:

<?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

Тогда с момента извлечения как задокументировано Вот

Возвращает количество переменных, успешно импортированных в таблицу символов

Я сделал это :

echo $result; // 2

Кажется, экстракт не импортировал -2 в таблицу символов в первую очередь.

Что именно является причиной, так как документация ничего не говорит об этом поведении?

1

Решение

Так как - не является действительным символом в соответствии с Соглашения об именах переменных php.

Следующая цитата бесстыдно скопирована из документации:

Имена переменных следуют тем же правилам, что и другие метки в 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)
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]