Aaron Axelsen wrote:
> I'm trying to figure out what the desired behavior is of using the
> return function to bail out of an include page.
> 
> I did some testing, and this is what I concluded.
> 
> First, I created the following file:
> 
> <?php
> if (defined('TEST_LOADED')) {
>         return;
> }
> define('TEST_LOADED',true);
> echo "blah blah blah blah<br/>";
> ?>
> 
> I then called it as follows:
> include('test.php');
> include('test.php');
> include('test.php');
> 
> The output is:
> blah blah blah blah
> 
> Second, I changed the test.php file to be the following:
> 
> <?php
> if (defined('TEST_LOADED')) {
>         return;
> }
> define('TEST_LOADED',true);
> echo "blah blah blah blah<br/>";
> 
> function myFunc($test) {
> 
> }
> ?>
> 
> When I load the page now, it throws the following error: PHP Fatal
> error: Cannot redeclare myfunc()
> 
> It appears that if there are functions in the include page that you
> can't use return to bail out.  What is the desired functionality in this
> case?  Is this a bug in how php handles it? or was return never designed
> to be used this way?
> 
> Any thoughts are appreciated.

Hi Aaron,

Unfortunately, the only way you can prevent the parse error is to use a
conditional function, return won't cut is, as the file is re-parsed
every time you include it, and all classes/functions are re-parsed
before the run-time if() is processed.

<?php
if (!function_exists('myFunc')) {
function myFunc($test) {
}
}
?>

This will work, but does slow down opcode caches and introduce potential
instability with them, as the added complexity is very unfriendly to
optimization.

Of course, you are much better off taking advantage of the
include_once[1] language construct, or separating your
need-to-be-included-many-times file from any function or class definitions.

Greg

http://www.php.net/include_once

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to