Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

FAQ Все о static

Статус
В этой теме нельзя размещать новые ответы.

Zhenia

Компетентный
И так, хотелось бы рассказать о static.

static (далее статик) это некая константа переменной по отношению к функции, которую МОЖНО изменять, т.е. изменять значения, убавлять и тому подобное.

Пример:


PHP:
#У нас есть некая функция

function mycounter()
{
   static counter; #обьявим переменную
   counter = counter + 1; #прибавим к переменной число
   printf("%d", counter);
}

#и есть некий цикл, где мы будем вызывать  данную функцию
for (new i = 5; i < 12; i ++) mycounter();

# Если бы мы место static написали new, то вывод был таким, "1111111...", но, результат будет иначе "123456"
#Так как статик запоминает данное значения для этой функции и не дает пересоздать локальную переменную.
#Вот в чем отличие new от static

Примеры работы производительности PHP код

PHP:
#Определение факториала числа

class Math
{
  function fac($v)
  {
    return ($v==0 || $v==1)?1:($v*Math::fac($v-1));
  }
  static function sfac($v)
  {
    return ($v==0 || $v==1)?1:($v*Math::sfac($v-1));
  }
}
function gettime()
{
  $arr=explode(' ',microtime());
  return $arr[1]+$arr[0];
}
for($i=1;$i[=100;++$i)
{
  echo $i."\t";
  $v=gettime();
  for($j=0;$j[$i;++$j)
    Math::fac(30);
  echo ((gettime()-$v)/$i*1000000)."\t";

  $v=gettime();
  for($j=0;$j[$i;++$j)
    Math::sfac(30);
  echo ((gettime()-$v)/$i*1000000)."\n";

#Среднее время работы функции объявленной без модификатора static — 64.518451690674 микросекунды.
#Среднее время работы функции объявленной с модификатором static — 31.158924102783 микросекунды

#Разница думаю видна, почти в 2 раза работа быстрее
}
Но к сожалению, статик локальной переменной после обработки функции не обнуляется и не высвобождает память, что является минусом.

Итог:

Для увелечения скорости работы, вы потеряете память.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу