Сразу скажу искала и на этом форуме и на других и на php.net ничего не нашёл. имеем файл test6_cl.php PHP: <?php class main_class{ var $test_tics; var $this_value; function main_class($value){ $this->this_value = $value; } function start(){ $this->test_tics = new test_ticks_cl($this->this_value); declare(ticks=1); } function some_calculate(){ for($x=1; $x<=3; $x++){ echo "val='".$this->this_value."' x='".$x."' \n"; } } } class test_ticks_cl{ var $the_value; function test_ticks_cl($value){ $this->the_value = $value; register_tick_function(array(&$this, 'show_value')); } function show_value(){ echo "value_is='".$this->the_value."' \n"; /*for($y=1; $y<=2; $y++){ echo "val='".$this->the_value."' y='".$y."' \n"; }*/ } } ?> второй файл test6.php PHP: <?php require_once('test6_cl.php'); echo "init first class\n"; $m1 = new main_class(1); $m1->start(); echo "init second class\n"; $m2 = new main_class(2); $m2->start(); echo "start main test \n"; echo "start first class test\n"; $m1->some_calculate(); echo "start second class test\n"; $m2->some_calculate(); echo "test calculate no in class\n"; for($x=1; $x<=3; $x++){ echo "x_no_in_class='".$x."' \n"; } ?> ------------------------------------------------------------ Первый вопрос при исполнении файла php -q test6.php Когда доходит до блока PHP: for($x=1; $x<=3; $x++){ echo "x_no_in_class='".$x."' \n"; } Тики не отрабатываются, то есть вывод происходит следующий, привожу не весь вывод, а только последнюю часть. value_is='2' value_is='1' val='2' x='3' value_is='1' value_is='2' value_is='2' value_is='1' value_is='1' value_is='2' value_is='2' value_is='1' value_is='1' value_is='2' value_is='2' value_is='1' test calculate no in class x_no_in_class='1' x_no_in_class='2' x_no_in_class='3' При этом не изменяя кода, кроме удаления строчки require_once('test6_cl.php'); соединяем всё в один файл и тики начинают работать и тут. value_is='2' value_is='1' x_no_in_class='3' value_is='1' value_is='2' value_is='2' Из-за чего такое разное поведение в одном и том же коде??? Это был нулевой вопрос, и он не является глобальным. Вопрос конечно чисто философский, но привёл он меня к следующим уже не философским вопросам. Вот эти вопросы. Первый вопрос. Как можно реализовать тики для данного пример, чтобы отрабатывалась только те тики которые принадлежать классу который сейчас производит действия? В данный момент тики выполняются независимо какой из классов работает в данный момент. То есть когда выполняется функция some_calculate из объекта $m1, чтобы не выполнялась функция show_value из объекта $m2->test_tics Предложение создать несколько файлов с копиями скрипта и с разными названиями классов не подходит. Второй вопрос, в принципе взаимозаменяемый с первым. Сейчас происходит следующая ситуация. Когда отрабатывается одна из зарегистрированных функций, то она тоже создаёт тики и начинается вызов функций друг друга, то есть чем больше зарегистрированных функций в тиках и чем больше в них кода, тем больше происходит циклов вызова друг друга. На пример это видно если разкомментировать следующий код в функции show_value PHP: function show_value(){ echo "value_is='".$this->the_value."' \n"; for($y=1; $y<=2; $y++){ echo "val='".$this->the_value."' y='".$y."' \n"; } } Происходит примено следующее. Часть вывода. value_is='1' val='1' y='1' val='1' y='2' val='2' y='1' value_is='1' val='1' y='1' val='1' y='2' value_is='1' val='1' y='1' val='1' y='2' val='2' y='2' value_is='1' val='1' y='1' val='1' y='2' value_is='1' val='1' y='1' val='1' y='2' value_is='1' val='1' y='1' val='1' y='2' -------------- val='2' x='2' value_is='1' value_is='2' val='2' y='1' val='2' y='2' val='1' y='1' value_is='2' val='2' y='1' val='2' y='2' value_is='2' val='2' y='1' val='2' y='2' val='1' y='2' value_is='2' val='2' y='1' val='2' y='2' value_is='2' val='2' y='1' val='2' y='2' value_is='2' val='2' y='1' То есть при работе одной из зарегистрированных функций, сколько бы не было в ней кода, нужно чтобы другие не выполнялись. А функций может быть очень много и могут быть разные. Когда есть одна зарегистрированная функция, и она вызывает в себе другие функции из её класса или вообще какие либо, то она не создаёт тиков, которые её бы опять вызвали. Вот такие вопросы. Оперционка linux, php версия PHP 5.2.1 (cli)
И кстати а почему тема была перенесена в раздел для новичков? Вроде я создавал её в разделе Программирование на PHP!