ID: 39693 User updated by: guessousmehdi at hotmail dot com Reported By: guessousmehdi at hotmail dot com Status: Bogus Bug Type: Output Control Operating System: windows PHP Version: 5.2.0 New Comment:
hi, that looks very weird for me, and obviously I don't have all the knowledge relative to the way php destruct objects. However, I notice that this behavior was not there on previous release of php (and even recent release of php5). So at least, would you be kind , and tell me what's would be a satisfying solution to still be able to call object on my callback function despite the termination ? Does creating a new reference to the object $t1, in a "dummy" variable by doing $t2=$t1 a good solution , or is there something wiser ? thanks Previous Comments: ------------------------------------------------------------------------ [2006-11-30 15:14:33] [EMAIL PROTECTED] This is expected behaviour. Object destructors are called before flushing the output buffers, so if your object has refcount == 1 (which is the case with $t2=$t1 commented out), $t1 is already destroyed when the callback is called. You do not see the error message, because the error happens in the function which flushes the buffer, so this is also expected. ------------------------------------------------------------------------ [2006-11-30 14:57:56] guessousmehdi at hotmail dot com Description: ------------ When I terminate a script by an exit, before end of execution, ob_start allows to to invoke a callback function. >From this callback function, I cannot access to an object (in source example:$t1) previously initiated in the script. However, if I save a dummy copy of that object in a new variable (for instance $t2), then it work as expected. In the source example, just uncomment the line "$t2=$t1;" to see what I mean. I works normally in previous version of php (php 4 and first releases of 5) I cannot remplace the exit at the end by an ob_flush(), because I'm including a big script in my real work, which is much more complex than the example I provide. Reproduce code: --------------- <?php class test{ function nice_string(){ return "hello world, how are you ?"; } } $t1 = new test(); // the following commented line makes a difference //$t2=$t1; function callbackfunc($output){ global $t1; $output ="chocolate<br>". $output . "<br>". $t1->nice_string(); return "$output"; } ob_start('callbackfunc'); echo "what a nice day"; exit(); ?> Expected result: ---------------- should output: chocolate what a nice day hello world, how are you ? Actual result: -------------- output nothing, blank page, probably a fatal error without any indication about it. Uncommenting line $t2=$t1 and it works fine again. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=39693&edit=1