|
|
|
|
|
для: speedsoft
(14.10.2012 в 17:14)
| | а почему это Вы время считали? тут память надо считать | |
|
|
|
|
|
|
|
для: Valick
(15.10.2012 в 21:06)
| | Он нужен в специфических случаях, когда вам точно нужно удалить переменную. Допустим, у вас очень большой массив, его можно удалить сразу же чтобы высвободить занятую память. Или вы хотите удалить элемент массива, к которому не хочется идти через итератор; к которому неприменим array_pop / array_shift. | |
|
|
|
|
|
|
|
для: Maxam
(14.10.2012 в 02:50)
| | иногда unset() это неотъемлемая часть логики скрипта
<?php
function badship($kor,$point,$x,$y){
if(empty($kor)) {echo "отсутствует массив ячеек игрового поля"; return false;}
if(empty($point)) {echo "отсутствует координата выстрела"; return false;}
if(empty($x)||empty($y)) {echo "отсутствует размерность игрового поля"; return false;}
$r[$point]=4;
$a=1;
if(isset($kor[$point-$a])){
if($kor[$point-$a]==1){unset($r); $r[$point]=3; return $r;}
if($kor[$point-$a]==3){
while(isset($kor[$point-$a])){
if($kor[$point-$a]==1){unset($r); $r[$point]=3; return $r;}
$r[$point-$a]=4; $a++;}
}
}
$a=1;
if(isset($kor[$point+$a])){
if($kor[$point+$a]==1){unset($r); $r[$point]=3; return $r;}
if($kor[$point+$a]==3){
while(isset($kor[$point+$a])){
if($kor[$point+$a]==1){unset($r); $r[$point]=3; return $r;}
$r[$point+$a]=4; $a++;}
}
}
$a=$y;
if(isset($kor[$point-$a])){
if($kor[$point-$a]==1){unset($r); $r[$point]=3; return $r;}
if($kor[$point-$a]==3){
while(isset($kor[$point-$a])){
if($kor[$point-$a]==1){unset($r); $r[$point]=3; return $r;}
$r[$point-$a]=4; $a=$a+$y;}
}
}
$a=$y;
if(isset($kor[$point+$a])){
if($kor[$point+$a]==1){unset($r); $r[$point]=3; return $r;}
if($kor[$point+$a]==3){
while(isset($kor[$point+$a])){
if($kor[$point+$a]==1){unset($r); $r[$point]=3; return $r;}
$r[$point+$a]=4; $a=$a+$y;}
}
}
return $r;
}
?>
|
| |
|
|
|
|
|
|
|
для: Maxam
(14.10.2012 в 02:50)
| | а чем еще удалить элемент массива? | |
|
|
|
|
|
|
|
для: Владимир55
(15.10.2012 в 13:52)
| | >для того, чтобы при повторном использовании этой переменной или массива, в них не попали ранее заданные значения.
Каким образом оно может попасть, если вы эту переменную фактически заново инициализируете?
unset как раз для случаев экономии памяти, и сброса параметра, который оперирует в условиях. | |
|
|
|
|
|
|
|
для: Sfinks
(15.10.2012 в 13:44)
| | Когда скрипт начинает работать, никаких переменных не объявлено
Это конечно. И ничего удалять в первых строках нет необходимости.
Но иногда в процессе создания или отладки первые строки становятся уже не первыми, ибо перед ними пявляются новые коды, или заносятся в цикл, или этот фрагмент перекочевывает в другой часть скрита, или еще что-то в этом роде. А потому при создании можно что-то недоглядеть, и обнаружится это нескоро, если скрипт сложный.
Поэтому я взял себе за правило делать фрагменты, защищенные от этих проблем.
Конечно же, это не правило. Это манера, и не более того. | |
|
|
|
|
|
|
|
для: Владимир55
(15.10.2012 в 13:17)
| | > начинаю скрипт с удаления всех переменных и, в особенности, массивов.
Не очень понял, как это?
Когда скрипт начинает работать, никаких переменных не объявлено, кроме суперглобальных $_POST, $_GET, $_COOKIE, $_REQUEST, $_SESSION, $GLOBALS и т.п.
Тогда что Вы Unset'аете? | |
|
|
|
|
|
|
|
для: Maxam
(14.10.2012 в 02:50)
| | Нужен ли unset вообще? В каких ситуациях его применяете вы?
Лично я применение этого оператора сделал нормой и, как правило, начинаю скрипт с удаления всех переменных и, в особенности, массивов.
Но отнюдь не в целях экономии памяти!
А для того, чтобы при повторном использовании этой переменной или массива, в них не попали ранее заданные значения. Ибо потом отыскивать проблему гораздо сложнее, чем сразу от нее защититься.
В особенности это важно в случаях, когда используются переменные с традиционными именами, например при работе с базами в выражениях типа
<?php
$res = mysql_query($query);
while($row = mysql_fetch_assoc($res))
|
Ну и, конечно же, в случае использования условия, основанного на существовании переменной, вроде
<?php
If ($x) echo “YES”;
|
| |
|
|
|
|
|
|
|
для: Гость
(15.10.2012 в 09:24)
| | Вопрос топика был в "замедлении" скрипта. Я привел тест, где видно что это капля в море. А про память я написал. | |
|
|
|
|
|
|
|
для: speedsoft
(14.10.2012 в 17:14)
| | Не совсем то измеряете. Тут скорее надо измерять не время выполнение, а объем занимаемой памяти. Простым добавлением unset-а в биллинге я уменьшил занимаемую им память с 150-ти мегабайт до 30-ти, что довольно существенно. | |
|
|
|
|