В чем разница между функцией extract () и ассоциативным массивом в php? - PullRequest
0 голосов
/ 26 апреля 2019

Я хочу знать, в чем разница между функцией extract () и ассоциативной функцией array () в php. Где я могу это использовать?

$state = array("AS"=>"ASSAM", "OR"=>"ORRISA", "KR"=>"KERELA"); 
extract($state); 
echo"\$AS is $AS <br/>\n\$KR is $KR <br/>\n\$OR is $OR <br/>";

вместо этой строки, если я пишу эхо "$state[AS]";, тогда я получаю тот же результат, но в чем разница?

1 Ответ

0 голосов
/ 26 апреля 2019

Как правило, я бы сказал, не используйте извлечение.
Обычно лучше хранить все значения внутри массива, поскольку вы можете зациклить массив.

С переменными вы не знаете, сколькосоздан с извлечением.Было ли это только одно значение в массиве или 50?
Если оно находится в массиве, вы можете посчитать и зациклить его, в переменных вам нужно проверить, установлена ​​ли каждая переменная или нет.

Также использование extract будетпереписать ваши переменные, если вам не повезло.

// Some calculations result in a price
$price = 500;

// Now you get an array from user input or json and extract it
$array = ["something" => "here", "price" => 10];
extract($array);

// Extracting overwrites your $price with value 10!
echo $price; // 10

Допустим, мы снова используем вышеописанный сценарий, но без извлечения.

// Some calculations result in a price
$price = 500;

// Now you get an array from user input or json
$array = ["something" => "here", "price" => 10];


echo $price; // 500
echo $array['price']; // 10

Теперь у нас есть и значение массива, и ваше значение.
Ничто не скомпрометировано, поскольку мыконтролируют, куда переходят значения.
Но как только вы используете извлечение, вы действительно разворачиваете все и можете надеяться только на лучшее.

TL / DR;

Не используйте экстракт.Если вам нужно / хотите использовать его, используйте только extract для ваших собственных массивов, которые вы контролируете на 100%.

...