Solved

Use a Class's Method as the callback function for ob_start()

Posted on 2008-10-14
4
1,145 Views
Last Modified: 2012-05-05
How can I, or even may I, sue a class's method as the call back function for ob_start()?

I tried several ideas and googled, but nothing doing so far.

The output of the attached code returns:
--------------------------------------------------------------------------------------------
Hello World, and hello {testvar}
Goodbye World, and goodbye {testvar}
Hello World, and hello Beautiful
Goodbye World, and goodbye Ugly
--------------------------------------------------------------------------------------------

When I trying to get this result:
--------------------------------------------------------------------------------------------
Hello World, and hello Beautiful
Goodbye World, and goodbye Ugly
Hello World, and hello Beautiful
Goodbye World, and goodbye Ugly
--------------------------------------------------------------------------------------------

Thanks for the help!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Buffer Testing</title></head>
 

<body>

<?php

class Testclass {

	public $testvar;

	public $html;
 

	public function Testclass() {

		$this->testvar="unknown";

		$this->html="helloworld.html";

	}

	

	public function displayOutput() {

		include($this->html);

	}

	

	public function adjustOutput($buffer){

		return (str_replace("{testvar}", $testvar, $buffer));

	}

	

}//END class Testclass
 

$ONE= new Testclass();

$TWO= new Testclass();

$ONE->testvar="Beautiful";

$ONE->html="helloworld.html";

$TWO->testvar="Ugly";

$TWO->html="goodbyeworld.html";
 

function cheatOne($buffer){

	return (str_replace("{testvar}", "Beautiful", $buffer));

}

function cheatTwo($buffer){

	return (str_replace("{testvar}", "Ugly", $buffer));

}
 

ob_start();//START MAIN BUFFER
 

  ob_start("$ONE->adjustOutput");//buffer one

    $ONE->displayOutput();

  ob_end_flush();

  

  ob_start("$TWO->adjustOutput");//buffer two

    $TWO->displayOutput();

  ob_end_flush();
 

  ob_start("cheatOne");//CHEATING buffer one

    $ONE->displayOutput();

  ob_end_flush();

  

  ob_start("cheatTwo");//CHEATING buffer two

    $TWO->displayOutput();

  ob_end_flush();
 

ob_end_flush();//OUTPUT THE MAIN BUFFER
 

?>

</body>

</html>

Open in new window

0
Comment
Question by:dban00b
  • 2
  • 2
4 Comments
 
LVL 1

Author Comment

by:dban00b
ID: 22716543
There's a typo in Testclass::adjustOutput()  "$testvar"  should read "$this->testvar" -- no change in the original question though, just didn't want anyone to get hung up on that typo.
0
 
LVL 25

Accepted Solution

by:
Squinky earned 500 total points
ID: 22719629
This is a common thing. instead of providing the name of the function to call, you pass an array containing the instance and the function name, like this:

ob_start(array($ONE, 'adjustOutput');

Docs are here: http://www.php.net/manual/en/language.pseudo-types.php#language.types.callback
0
 
LVL 25

Expert Comment

by:Squinky
ID: 22719631
Oops, missed a bracket:

ob_start(array($ONE, 'adjustOutput'));
0
 
LVL 1

Author Comment

by:dban00b
ID: 22722001
Awesome!  Thanks!
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

This article will explain how to display the first page of your Microsoft Word documents (e.g. .doc, .docx, etc...) as images in a web page programatically. I have scoured the web on a way to do this unsuccessfully. The goal is to produce something …
Author Note: Since this E-E article was originally written, years ago, formal testing has come into common use in the world of PHP.  PHPUnit (http://en.wikipedia.org/wiki/PHPUnit) and similar technologies have enjoyed wide adoption, making it possib…
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

747 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now