#21725 [Ver->Csd]: return behaviour differs between include and require
ID: 21725
Updated by: sniper@php.net
Reported By: josh@chatgris.com
-Status: Verified
+Status: Closed
Bug Type: Scripting Engine problem
Operating System: Linux
PHP Version: 4.3.1-dev
New Comment:
This bug has been fixed in CVS.
In case this was a PHP problem, snapshots of the sources are packaged
every three hours; this change will be in the next snapshot. You can
grab the snapshot at http://snaps.php.net/.
In case this was a documentation problem, the fix will show up soon at
http://www.php.net/manual/.
In case this was a PHP.net website problem, the change will show
up on the PHP.net site and on the mirror sites in short time.
Thank you for the report, and for helping us make PHP better.
Previous Comments:
------------------------------------------------------------------------
[2003-02-10 11:54:39] sniper@php.net
Simple test case:
test.php:
<?php
var_dump(include('foo.php'));
var_dump(require('foo.php'));
?>
foo.php:
<?php
return 'foo';
?>
Running test.php outputs:
string(3) "foo"
UNKNOWN:0
------------------------------------------------------------------------
[2003-01-18 07:12:07] josh@chatgris.com
when a return is made out of an included file (using
include), the value is properly returned. However, using
the require statement instead results in values not being
preperly returned from a return statement in included
code.
Example
This function currently exists in a class and works.
function execQuery( &$sql, $result_status, $file, $line )
{
return include( dirname( __FILE__
)."/execQuery.php" );
}
This function DOES NOT WORK when I attempt the use the
result it is not defined.
function execQuery( &$sql, $result_status, $file, $line )
{
return require( dirname( __FILE__
)."/execQuery.php" );
}
This is the contents of the file it includes
<?php
$this->validateFileConstants( $file,
$line, __FILE__, __LINE__ );
if ( !is_string( $sql ) ) {
$this->{$this->log_func} ( "File: $file. Line:
$line. \$sql is NOT a string. (%s, %d)",__FILE__, __LINE__
);
}
if ( !is_int( $result_status ) ) {
$this->{$this->log_func} ( "File: $file. Line:
$line. \$sql is NOT a string. (%s, %d)", __FILE__,
__LINE__ );
}
if ( $this->conn == NULL ) {
$this->{$this->log_func} ( "File: $file. Line:
$line. \$conn not open. (%s, %d)", __FILE__, __LINE__ );
}
if ( pg_result_status( $rs = pg_query ( $this->conn,
$sql ) ) !== $result_status ) {
/*pg_query returns false, can't use result_error.*/
$this->{$this->log_func} ( "File: $file. Line:
$line. Error executing. \"%s\" (%s, %d)"
, pg_last_error(), __FILE__,
__LINE__ );
}
return $rs;
?>
This behavious is also inconsistent with tjhe document
which reads that the onyl difference if a warning or Fatal
Error.
Josh.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=21725&edit=1
Thread (3 messages)