ID:               20924
 Comment by:       2072 at 2072productions dot com
 Reported By:      a_villacis at palosanto dot com
 Status:           Bogus
 Bug Type:         Scripting Engine problem
 Operating System: Linux 2.4.7-10
 PHP Version:      4.3.0RC2
 New Comment:

Well this is maybe not a bug but it is a real problem when you use the
pcntl extension to handle signals where you have to put a
declare(ticks=1); for the whole script...



I think something has to be done with pcntl signal handling to fix that
because it's really annoying.


Previous Comments:
------------------------------------------------------------------------

[2002-12-24 11:57:06] [EMAIL PROTECTED]

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

This is actually not a bug. Because the declare() stuff works as some
kind of conditional compile the functions will not be defined during
parsing/compile, but only when the code is executed for the first time.
Of course when the postdefined_in(); is reached the code below has not
been executed before and thus you can an undefined function error. The
same would happen if you'd put it in an if like this:



<?php



if (TRUE) {

    function blah1() {

    }



    blah1();

    blah2();



    function blah2() {

    }

}

?>





------------------------------------------------------------------------

[2002-12-24 11:44:23] a_villacis at palosanto dot com

Same problem with 4.3.0RC4.

------------------------------------------------------------------------

[2002-12-12 11:46:22] a_villacis at palosanto dot com

I just upgraded to version 4.3.0RC3 with the same

configure command, but the script gives the same message

as in the original posting.



This behavior is rather annoying, but a workaround is to 

declare the troublesome procedure *outside* the scope of

the 'declare(ticks=1) {}' block. However, this does not

seem to help if the new syntax 'declare(ticks=1);' is used

to cover the entire script under the declare() scope.



Alex Villacis Lasso

[EMAIL PROTECTED]

------------------------------------------------------------------------

[2002-12-10 13:38:41] a_villacis at palosanto dot com

My configuration (as reported by phpinfo()):

./configure --with-apxs=/opt/httpd/bin/apxs 

 --with-mysql=/usr --with-gd 

 --with-curl=/opt/curl-7.10.1/ 

 --with-pdflib=/opt/pdflib/ 

 --with-zlib --enable-inline-optimizations 

 --enable-pcntl --enable-dio --with-ncurses 

 --enable-sockets

What I did (filename 'ticks_bug_php'):

--------------- CUT HERE --------------------

#!/usr/local/bin/php

<?php



        function predefined_out()

        {

                echo "Inside predefined_out()\n";

        }



        predefined_out();

        postdefined_out();



        function postdefined_out()

        {

                echo "Inside postdefined_out()\n";

        }



        declare(ticks = 1)

        {

                function predefined_in()

                {

                        echo "Inside predefined_in()\n";

                }



                predefined_in();

                postdefined_in();



                function postdefined_in()

                {

                        echo "Inside postdefined_in()\n";

                }

        }

?>

--------------- CUT HERE --------------------

What I expected:

 [EMAIL PROTECTED] practica]$ ./ticks_bug_php 

 Inside predefined_out()

 Inside postdefined_out()

 Inside predefined_in()

 Inside postdefined_in()

 [EMAIL PROTECTED] practica]$



What I got instead:



 [EMAIL PROTECTED] practica]$ ./ticks_bug_php 

 Inside predefined_out()

 Inside postdefined_out()

 Inside predefined_in()



 Fatal error: Call to undefined function:  postdefined_in()     

 in /home/avillaci/programa/practica/ticks_bug_php on line

 25

 [EMAIL PROTECTED] practica]$



PHP refuses to call postdefined_in() before its definition

inside the scope of 'declare(ticks=1){}', but has no problem

calling postdefined_out() before its definition, outside

the scope of 'declare(ticks=1){}'.

Any hints in solving this issue will be greatly appreciated.

Alex Villacis Lasso

[EMAIL PROTECTED]





------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=20924&edit=1

Reply via email to