ID: 20924 Updated by: [EMAIL PROTECTED] Reported By: [EMAIL PROTECTED] -Status: Open +Status: Bogus Bug Type: Scripting Engine problem Operating System: Linux 2.4.7-10 PHP Version: 4.3.0RC2 New Comment:
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() { } } ?> Previous Comments: ------------------------------------------------------------------------ [2002-12-24 11:44:23] [EMAIL PROTECTED] Same problem with 4.3.0RC4. ------------------------------------------------------------------------ [2002-12-12 11:46:22] [EMAIL PROTECTED] 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] [EMAIL PROTECTED] 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: [avillaci@srv64 practica]$ ./ticks_bug_php Inside predefined_out() Inside postdefined_out() Inside predefined_in() Inside postdefined_in() [avillaci@srv64 practica]$ What I got instead: [avillaci@srv64 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 [avillaci@srv64 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