#26032 [Com]: return in included files as not always the same behaviour
| From: | christian dot lefebvre at atosorigin dot com | Date: | Fri, 02 Apr 2004 07:11:06 +0000 |
| Subject: | #26032 [Com]: return in included files as not always the same behaviour | ||
| References: | 1 | Groups: | php.doc |
| Request: | Send a blank email to phpdoc+get-969359897@lists.php.net to get a copy of this message | ||
ID: 26032
Comment by: christian dot lefebvre at atosorigin dot com
Reported By: kevin at hatry dot com
Status: Open
Bug Type: Documentation problem
Operating System: irrelevant
PHP Version: 4.3.2
New Comment:
I'm testing php5 and I obtain what you expect as result, but i'd like
the opposite :-)
A lot of old php code use conditionnal return at
beginning of includefiles to simulate include_once
behavior. And this tips works no more with php5 because
all declared functions raise "already defined" errors.
See my comments on http://bugs.php.net/bug.php?id=18590
for details
Previous Comments:
------------------------------------------------------------------------
[2003-10-29 17:16:34] kevin at hatry dot com
Description:
------------
First i'll describe the more or less documented way of doing:
- When putting a return in an included file, the execution of the file
stops and returns to the parent file (all normal), but functions
defined in the included file are nontheless put in the environnement
(they are callable in the parent file). OK i understand that: functions
are added in the environnement at parsing time (so before execution
time).
- When including two times the same file which defines a function, i
get a fatal error saying the function is already defined. (which is
normal).
But when you mix both, ie: an included file defining a function with a
return at the beginning and that you include that file two times you
dont have the fatal error: php seems to ignore the second
declarations.
Of course the example is trivial but it wotks the same if the includes
are done in separate files.
A last remark: if you add code after the return, it will never be
executed (that's normal) whereas the function will exists which is
disturbing : i spent half an hour wondering why my $GLOBALS affectation
put after the return (which was in an if statement) didnt appear even
when i could use the function !
Even if it's not considered as a bug i think it should be properly
documented.
Thanks.
Reproduce code:
---------------
<?php
// this is the included file: "inc.php" **************
return;
function dummy () { return 2; }
?>
and, the main file:
<?php
require('./inc.php');
require('./inc.php');
if( function_exists('dummy') ) { echo 'function: yes'."\n"; }
else { echo 'function: no'."\n"; }
?>
Expected result:
----------------
Fatal error: Cannot redeclare dummy() (previously declared in
inc.php:5) in inc.php on line 5
Actual result:
--------------
if the return statement is left uncommented:
function: yes
so the function exists despite the return.
if the return statement is commented:
Fatal error: Cannot redeclare dummy() (previously declared in
inc.php:5) in inc.php on line 5
which should be the normal behaviour in both cases, i think.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=26032&edit=1