Вопросы о php unset function - PullRequest
       12

Вопросы о php unset function

3 голосов
/ 04 июня 2011

У меня есть вопросы по поводу unset

  1. Как сбросить все переменные. Должен ли я использовать unset($var1,$var2,$var3,...) или существует какой-либо другой простой метод?
  2. удаление переменных в конце функций - хорошая практика?
  3. Отмена установки переменной будет reduce программирование execution time или нет?

Спасибо

Ответы [ 3 ]

3 голосов
/ 04 июня 2011
  1. Вы имеете в виду unset($var1,$var2,$var3,...) не достаточно просто для вас?

  2. Нет смысла делать это явно, так как локальные переменные всегда исчезают в концеобласти видимости функции.Это относится и к ссылочным переменным, только локальные для функции ссылки исчезнут, но все, на что они ссылаются, если они находятся за пределами области действия функции, все равно будет там.

  3. Понятия не имею.

1 голос
/ 04 июня 2011

Как сбросить все переменные. Должен ли я использовать unset ($ var1, $ var2, $ var3, ...) или существует какой-либо другой простой метод?

Да, этонормальный способ сбрасывать несколько переменных.Вы могли бы перебрать переменные в области видимости и сбросить их, но это было бы излишним.

Отмена установки переменных в конце функций - это хорошая практика?. Любая разница!

Хотя переменные будут собираться мусором в конце области действия (функция, класс, сценарий), это может быть полезно сделать в однофайловом сценарии (процедурном) - особенно в сценариях, где другие сценарии произвольно включаются в область действия.

Как говорится, при чистой организации это не нужно;однако, это тоже не обязательно плохо.

Отмена установки переменной приведет к сокращению времени выполнения программы или нет?

В большинстве случаев разницы будет мало или нет;однако, как я упоминал ранее, это не может повредить и потенциально может принести некоторую ясность в отношении того, что находится / не находится в сфере применения.Фактически, я обычно делаю это сразу после for / foreach, поскольку for / foreach не имеет области видимости блока, поэтому переменные, определенные внутри этих блоков, доступны после цикла.

Пример:

foreach ($doctors as $key => $val) {
    // do something
}
unset($key, $val);

Кстати, если вы хотите знать, как на самом деле сделать это навалом (да, это возможно, но это не красиво):

<?php

$_SCRIPT_one   = 1;
$_SCRIPT_two   = 2;
$_SCRIPT_three = 3;

// list of all variables defined
$all   = array_keys(get_defined_vars());

// list only the local variables we are interested in
$local = array_filter($all, function($name) { return preg_match('/^_SCRIPT_/i', $name); });

// dump currently scoped local variables
var_dump($local);


// unset local variables
foreach ($local as $var) { unset($$var); }


// list of all variables defined
$all   = array_keys(get_defined_vars());

// list only the local variables we are interested in
$local = array_filter($all, function($name) { return preg_match('/^_SCRIPT_/i', $name); });

// dump currently scoped local variables
var_dump($local);
0 голосов
/ 04 июня 2011

Во-первых, unset - это языковая конструкция, а не функция.

Как сбросить все переменные. Должен ли я использовать unset ($ var1, $ var2, $ var3, ...) или существует какой-либо другой простой метод?

Вы можете сбросить все глобальные переменные, однако я не понимаю, почему вы сделали бы такую ​​вещь:

foreach (array_keys($GLOBALS) as $var) {
   if ($var != 'GLOBALS') unset($GLOBALS[$var]);
}

удаление переменных в конце функций - хорошая практика?. Какая разница!

Нет, переменная автоматически сбрасывается, когда выходит из области видимости. Нет смысла делать это вручную.

Снятие переменной - это уменьшит время выполнения программирования или нет?

Не совсем, может уменьшить использование памяти.

...