ID: 23038 Comment by: hewei at ied dot org dot cn Reported By: black at sunshine dot krneki dot org Status: Closed Bug Type: Scripting Engine problem Operating System: linux debian PHP Version: 4.3.2-RC Assigned To: andrei New Comment:
The bug is not fixed. Run the following script either before or after applying andrei's recent patch, one will reproduct the bug. <?php class bar { function doit() { print "Doing bar as " . get_class($this) . " ...\n"; } } class foo { function foo() { print_r(aggregation_info($this)); aggregate($this, "bar"); } } class foobar extends foo { } $a = new foo(); $a->doit(); unset($a); $b = new foobar(); $b->doit(); ?> Previous Comments: ------------------------------------------------------------------------ [2003-06-04 14:02:58] [EMAIL PROTECTED] 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. ------------------------------------------------------------------------ [2003-05-23 11:14:44] hewei at ied dot org dot cn This short script can reproduce the aggregation bug I reported above. class bar { function doit() { print " Doing...\n"; } } class foo { function foo() { print_r(aggregation_info($this)); aggregate($this, "bar"); } function spawn() { return new foo(); } } $a = new foo(); $a->doit(); $b = $a->spawn(); $b->doit(); unset($a); $c = $b->spawn(); $c->doit(); Besides 'unset($a)', '$a = new foo()' will also cause the same problem. ------------------------------------------------------------------------ [2003-05-01 01:31:02] hewei at ied dot org dot cn Similar problem happens to me. I either cannot reproduce the situation because sometimes changing a irrelevant place will temporaily wipe the problem away. But it will come back at an unexpected time. The problem once caused Apache 2.0 crashing on Win32. But after some irrelevant code restructuring, it now casues error like this: Fatal error: Call to undefined function: foo() in /path/bar.php on line xxx But foo() is surely an aggregated method. The strange but perhaps useful point is that a print_r of aggregation_info() at the bug place shows the function dose exists. Even I add the following codes the error still exists: if (!method_exists($this, "foo")) { deaggregate($this, "CLASS_having_method_foo"); aggregate($this, "CLASS_having_method_foo"); } This problem really stops me from doing any futher coding. I tried ZendSafeGard, upgraded to the 4.3.2RC2, changed from Apache module to CGI, and moved from Windows to Linux(RedHat 9.0). But none seems to imporve the situation. Since the problem is not easily reproduced outside my complex class hierarchy, please instruct me of any other debug information I can print out at the bug place. And because the PHP I'm using is recompiled, I would even like to try do source codes debugging. ------------------------------------------------------------------------ [2003-04-06 16:22:40] [EMAIL PROTECTED] just letting you know that its been a week now with not a single crash after removing aggregate - contact me when/if you want/need the db dump and code dump to analyze this/test it. ------------------------------------------------------------------------ [2003-04-03 19:45:12] [EMAIL PROTECTED] . ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/23038 -- Edit this bug report at http://bugs.php.net/?id=23038&edit=1