PHP с помощью Declare? Что такое тик?

Меня немного смущает функция PHP declare.

Что такое один тик? Я думал, что галочка равна одной строке кода?

Но если я использую:

function myfunc() {
        print "Tick";   
}

register_tick_function("myfunc");

declare(ticks=1) {
   echo 'foo!bar';
}

Скрипт печатает:

"Отметить" 2 раза??


person opHASnoNAME    schedule 14.03.2010    source источник


Ответы (2)


Вы получаете галочку для каждой строки; и каждый блок {} Попробуйте так:

declare(ticks=1) echo 'foo!bar';

Без блокировки, без лишних галочек.

declare(ticks=1) {{ echo 'foo!bar'; }}

Больше посторонних блоков = больше тиков.

PS: кстати, галочки — довольно экзотическая функция, и они полезны только в нескольких крайне редких ситуациях. Они не эквивалентны многопоточности или чему-то еще. Если для вас галочки — это решение проблемы, вам следует написать о своей проблеме в другом вопросе, потому что это, вероятно, не правильное решение.

person Josh Davis    schedule 14.03.2010
comment
Для чего могут быть полезны галочки? - person Pacerier; 05.07.2013
comment
@thomasrutter Как? Не могли бы вы привести пример или ссылку? - person tonix; 22.06.2016
comment
pcntl_signal_dispatch(); или тики = 1; Это оба метода, позволяющие обрабатывать сигналы в php-скрипте. - person John; 17.10.2016

Вы на правильном пути относительно того, что такое тик.

http://www.tuxradar.com/practicalphp/4/21/0

Проще говоря, тик — это специальное событие, которое происходит внутри PHP каждый раз, когда он выполняет определенное количество операторов. Эти операторы являются внутренними для PHP и приблизительно соответствуют операторам в вашем скрипте. Вы можете контролировать количество операторов, необходимых для запуска тика, с помощью функции declare(), и вы можете зарегистрировать функции, которые будут выполняться при возникновении тика, с помощью функции register_tick_function(). Как уже упоминалось, синтаксис объявления очень необычен, так что будьте готовы к шоку!

person Jayrox    schedule 14.03.2010
comment
Спасибо. Мне показалось странным, что в руководстве по php.net не определены тики в функциях declare() и *_tick_function(). Вы знаете, почему они удаляются в PHP6? - person David; 11.09.2012
comment
Как вообще тики попали в PHP? - person Pacerier; 05.07.2013
comment
@Jayrox - Любые подтверждающие доказательства, подтверждающие ваше утверждение, галочки PHP6 будут полностью удалены теоретически? - person Jimbo; 13.09.2013
comment
@Jimbo: единственная ссылка, которую я нашел по этому поводу, была tuxradar.com/practicalphp/4/21. /0 - person Quamis; 20.08.2014
comment
Если клещи уходят, что приходит им на смену? - person CMCDragonkai; 25.09.2014
comment
Не могли бы вы дать ссылку на Обратите внимание, что в PHP7 галочки будут полностью удалены ??? Насколько мне известно, это неправда. - person rdlowrey; 26.05.2015
comment
PHP 7 вышел, а тики все еще есть - person Avindra Goolcharan; 11.07.2016