ID:               31607
 Comment by:       eric at footsteps dot nl
 Reported By:      denk at us dot es
 Status:           Open
 Bug Type:         Output Control
 Operating System: Linux
 PHP Version:      4.3.10
 New Comment:

This behaviour is by design, for more information:

http://www.php.net/manual/en/language.oop.newref.php

this line 
$page=& new HtmlPage('bar:');
would have the behaviour you seem to expect.


Previous Comments:
------------------------------------------------------------------------

[2005-01-19 11:07:03] denk at us dot es

Description:
------------
When executing the following script, output buffering is activated in
the constructor of HtmlPage, using a reference to $this. Php seems to
create a copy of the object at this moment, as subsequent changes to
the object (setting $page->title in the example) are not reflected in
the output. This example produces: "bar:Text". However, when we comment
the call to ob_start in the constructor and uncomment the call to
ob_start using the reference to $page in the main program, the code
works as expected, producing "foo:Text".



Reproduce code:
---------------
class HtmlPage {
    var $title;
    function HtmlPage($title='') {
        $this->title=$title;
        // starting ob here don't work
        ob_start(array(&$this,'obuffer'));
    }
    function obuffer($buffer) {
        return ($this->MakePageTop().$buffer);
    }
    function SetHtmlTitle($title) {
        $this->title=$title;
    }
    function MakePageTop() {
      return '<html><body>'.$this->title;
    }
}

  $page=new HtmlPage('bar:');
//  when used here, it works as expected
//  ob_start(array(&$page,'obuffer'));
  echo 'Text<br>';
  $page->title='foo:';

Expected result:
----------------
foo:Text


Actual result:
--------------
bar:Text


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=31607&edit=1

Reply via email to