Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: declare

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: прошу пояснение
Bio man
Отправлено: 12 Февраля, 2012 - 01:37:30
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




прочитал статью Declare
и не понял многого.
вопросы:
1)что за низкоуровневые операции?
2)не как не пойму логику исполнения
PHP:
скопировать код в буфер обмена
  1. declare(ticks=1);
  2.  
  3. // Функция, исполняемая при каждом тике
  4. function tick_handler()
  5. {
  6.     echo "tick_handler() выполнено<br>";
  7. }
  8.  
  9. register_tick_function('tick_handler');
  10.  
  11. $a = 1;
  12.  
  13. if ($a > 0) {
  14.     $a += 2;
  15.     print($a);
  16. }

вот результат
Цитата:
tick_handler() выполнено
tick_handler() выполнено
tick_handler() выполнено
3tick_handler() выполнено
tick_handler() выполнено
tick_handler() выполнено
 
 Top
Panoptik
Отправлено: 12 Февраля, 2012 - 02:02:31
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




занятная штука. вот только где ее применить пока нет соображений.
1)низкоуровневая операция - это схоже с действиями как в ассемблере. например присваивание переменной значения - это низкоуровневая операция или одно математическое действие, или вызов функции
2)логика такова что после каждых N низкоуровневых операций (у вас это 1) вызывается функция которая определена в register_tick_function. вот и получается что после присваивания, и операции а +=2; (тут я так понимаю выполнилось 2 операции) у вас каждый раз вызывалась функция tick_handler(). ну и после вывода еще 1 раз. - вывод же тоже операция.
а вот 2 последних раза я тоже пока не пойму. тут нужно поэкспериментировать или найти более подробный материал.


-----
Just do it
 
 Top
Bio man
Отправлено: 12 Февраля, 2012 - 02:23:36
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Panoptik пишет:
а вот 2 последних раза я тоже пока не пойму
я бы сказал 3 последних. первые 3 это 2 присвоения и 1 вывод. а вот 3 последних от куда никак не пойму.
данный код завершался exit()'ом, т.к. после следовал еще другой код, так вот, удалил код после ексита и сам ексит результат изменился на
Цитата:
tick_handler() выполнено
tick_handler() выполнено
tick_handler() выполнено
3tick_handler() выполнено
tick_handler() выполнено
tick_handler() выполнено
tick_handler() выполнено
 
 Top
Panoptik
Отправлено: 12 Февраля, 2012 - 02:28:22
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




ну тут маленькая поправка: первых 3 вывода - это 2 присваивания + одна математическая операция
потом нам вывелась 3-ка и потом снова сработал тик вывода то есть 4 действия - они логичны и видны.
а вот последние - это остается только догадываться... даже интересно почему без эксита стало больше операций. возможно интерпретатор осуществляет какие-то свои операции. а с экситом он прекратил работу и закончил ее раньше на одну операцию...


-----
Just do it
 
 Top
sKaa
Отправлено: 12 Февраля, 2012 - 02:30:09
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Bio man рискну предположить что это какая-то встроенная shutdown-функция php
 
 Top
Panoptik
Отправлено: 12 Февраля, 2012 - 02:33:07
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




еще для теста попробуйте перед $a = 1; сделать echo ('x'); чтобы увидеть сколько тиков будет на вывод


-----
Just do it
 
 Top
Bio man
Отправлено: 12 Февраля, 2012 - 02:38:39
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




может в конце срабатывает сборщик мусора и из-за это добавляются тики!? насчет мат. действий то
Цитата:
Не все выражения подсчитываются. Обычно, условные выражения и выражения аргументов не подсчитываются.
 
 Top
sKaa
Отправлено: 12 Февраля, 2012 - 02:42:33
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Bio man вот только :
Panoptik пишет:
вот только где ее применить пока нет соображений.
, я тоже теряюсь в догадках ))
 
 Top
Bio man
Отправлено: 12 Февраля, 2012 - 02:43:14
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




первые 3 тика это объявление ф-ции, потом присвоение два раза, потом вывод, а потом хз что
(Добавление)
Panoptik пишет:
еще для теста попробуйте перед $a = 1; сделать echo ('x'); чтобы увидеть сколько тиков будет на вывод
добавился 1 тик
(Добавление)
такие догадки. последние 3 тика (без ексита), первые 2 это блок иф, т.к. если его убрать, то пропадают 2 тика а последний это возможно сборщик мусора. и кстати анонимные ф-ции не считаются тиком, такой код дал на 1 тик меньше
PHP:
скопировать код в буфер обмена
  1. register_tick_function(function(){echo "tick_handler() выполнено<br>";});
 
 Top
Panoptik
Отправлено: 12 Февраля, 2012 - 02:56:36
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




а может еще фигурные скобки влияют? )))


-----
Just do it
 
 Top
Bio man
Отправлено: 12 Февраля, 2012 - 03:04:46
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Panoptik, каким то образом влияют. код
PHP:
скопировать код в буфер обмена
  1. declare(ticks=2);
  2. // Функция, исполняемая при каждом тике
  3. register_tick_function(function(){echo "tick_handler() выполнено<br>";});
  4. $a = 1;
  5. if ($a > 0)
  6.     $a += 2;
  7.     print($a);
  8.  

результат
Цитата:
tick_handler() выполнено
tick_handler() выполнено
tick_handler() выполнено
3tick_handler() выполнено
tick_handler() выполнено

код
PHP:
скопировать код в буфер обмена
  1. declare(ticks=2);
  2.  
  3. // Функция, исполняемая при каждом тике
  4. register_tick_function(function(){echo "tick_handler() выполнено<br>";});
  5. $a = 1;
  6.     $a += 2;
  7.     print($a);

результат
Цитата:
tick_handler() выполнено
tick_handler() выполнено
3tick_handler() выполнено
tick_handler() выполнено

(Отредактировано автором: 12 Февраля, 2012 - 03:06:40)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB