|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2003-10-10 19:30 UTC] viking at dslnorthwest dot net
Description:
------------
When extending the DB_DataObject class using PHP 4.3.3,
pass-by-reference calls to class methods don't work.
After removing the call to overload() at the bottom of
DB_DataObject.php, references work as expected. The
following comments at the bottom of DB_DataObject
allude to this:
// technially 4.3.2RC1 was broken!!
// looks like 4.3.3 may have problems too....
if ((phpversion() != '4.3.2-RC1') && (version_compare(
phpversion(), "4.3.1") > 0)) {
overload('DB_DataObject');
$GLOBALS['_DB_DATAOBJECT']['OVERLOADED'] = true;
}
Reproduce code:
---------------
require_once("DB/DataObject.php");
class no_problem
{
function pass_by_reference(&$ref)
{
$ref = "Pass by reference works";
}
}
class problem extends DB_DataObject
{
function pass_by_reference(&$ref)
{
$ref = "Pass by reference works";
}
}
$good = &new no_problem();
$bad = &new problem();
$message = "Pass by reference does not work!";
$good->pass_by_reference($message);
print "$message\n";
$message = "Pass by reference does not work!";
$bad->pass_by_reference($message);
print "$message\n";
Expected result:
----------------
Pass by reference works
Pass by reference works
Actual result:
--------------
Pass by reference works
Pass by reference does not work!
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 05:00:01 2025 UTC |
simple script to reproduce: <? class no_problem { function pass_by_reference(&$ref) { $ref = "Pass by reference works"; } } class problem { function pass_by_reference(&$ref) { $ref = "Pass by reference works"; } // simple dummy call implementation.. function __call($method,$params,&$return) { if ($method == get_class($this)) { return true; } return false; // not found! } } overload('problem'); $good = &new no_problem; $bad = &new problem; $message = "Pass by reference does not work!"; $good->pass_by_reference($message); print "$message\n"; $message = "Pass by reference does not work!"; $bad->pass_by_reference($message); print "$message\n"; ?> should print Pass by reference works Pass by reference works actually prints Pass by reference works Pass by reference does not work!