//invoke new glow method$theCritter->glow; ?> The program begins by including the previously designed Critter class.. I defined the GlitterCritterjust like any other class, except for
Trang 1change in the Critterclass definition: Notice that the constructor no longer sets the name property directly, but uses the setNamemethod instead This is useful
in a moment
The Inherit.phpprogram adds some new features to the basic Critterclass:
<!doctype html public “-//W3C//DTD HTML 4.0 //EN”>
<html>
<head>
<title>Glitter Critter</title>
</head>
<body>
<?
// Incorporating Inheritance
//pull up the Critter class
include “critter.php”;
//create new Glitter Critter based on Critter
class GlitterCritter extends Critter{
//add one method
function glow(){
print $this->name “ gently shimmers <br> \n”;
} // end glow
//override the setName method
function setName($newName){
$this->name = “Glittery “ $newName;
} // end setName
} // end GC class def
//make an instance of the new critter
$theCritter = new GlitterCritter(“Gloria”);
//GC has no constructor, so it ‘borrows’ from its parent
print “Critter name: “ $theCritter->getName() “<br>\n”;
258
l u
Trang 2//invoke new glow method
$theCritter->glow();
?>
</body>
</html>
The program begins by including the previously designed Critter class I could
now make instances of that class, but I have something sneakier in mind I want to
make a new type of Critterthat knows how to glow I’ll call it the GlitterCritter
(I also wrote prototypes for the HitterCritter, BitterCritter, and SpitterCritter,
but I decided not to include them in the book.)
I defined the GlitterCritterjust like any other class, except for the extendskeyword:
class GlitterCritter extends Critter{
Unless I indicate otherwise, the GlitterCritter will act just like an ordinary
Critter It automatically inherits all properties, methods, and even the
con-structor from the parent class I added two methods to the class One brand new
method is called glow() The original Critterclass doesn’t have a glow()method
The other method is called setName() The original Critterclass has a setName()
method as well
When you run the program, you see a page like Figure 7.10
259
j e
FIGURE 7.10
The Glitter
Critter has some
new tricks and
borrows others
from the ordinary
Critter.
Trang 3Since GlitterCritter is based on Critter and I’m making an instance of GlitterCritter, the default behavior of $theCritteris just like an ordinary Critter Glitter-Critterdoesn’t have a constructor, so it uses the constructor from Critter When I added the glow()method, the GlitterCritterwas able to do something its parent could not When I created a new method that had the same name as a method in the parent class, the new method overrode the original method, chang-ing the behavior Note that I didn’t change the constructor at all, but since the con-structor calls the addName()method, GlitterCritternames all begin with Glittery
Building the SuperHTML Class
Now that you understand something about object-oriented methodology, you can look at the innards of the SuperHTML Although the class has a lot of code, everything is made up of very simple code elements The object-oriented nature
of the class is what gives it its real power As you look through the code, I give suggestions on areas you could improve the code or ways to extend the class
Setting Up the File
The class file is meant to be included in other programs, so I stripped it of all unnecessary HTML and PHP code The only thing in the file is the class definition
<?
//SuperHTML Class Def
class SuperHTML{
//properties
var $title;
var $thePage;
You might be surprised that the entire SuperHTMLclass has only two properties
It could have a lot more, but I didn’t need them to get the basic functionality I wanted The titleproperty holds the page title, which appears as both the title and a level-one headline The thePage property is special, because it is a string variable that contains all the code for the resulting HTML output
260
l u
I N THE R EAL W ORLD
Entire books have been written about OOP This chapter means to whet your appetite for the power and flexibility this programming style offers I encourage you to read more about OOP and to investigate languages that support the par-adigm more completely than does PHP.
Trang 4Creating the Constructor
You might expect a complex object to have an involved constructor, but it isn’t
necessarily so
function construct($tTitle = “Super HTML”){
//constructor
$this->SetTitle($tTitle);
} // end constructor
The constructor copies a temporary title value over to the titleproperty using
the currently undefined setTitle()method
Manipulating Properties
You would expect to find access methods for the properties, and SuperHTMLhas a
few There is a setTitle(), a getTitle(), and a getPage()method However, there’s
no explicit setPage()method because I intend for the programmer to build the
page incrementally through all the other methods
function getTitle(){
return $this->title;
} // end getTitle
function setTitle($tTitle){
$this->title = $tTitle;
} // end setTitle
function getPage(){
return $this->thePage;
} // end getPage
Each of these methods is simplistic You could improve them by checking for
pos-sible illegal values or adding default values
Adding Text
The SuperHTML program doesn’t print anything All it ever does is create a big
string (thePage) and allow a programmer to retrieve that page
The addText()function adds to the end of $thePagewhatever input is fed it, along
with a trailing newline character Like most of the functions in the class, a g
ver-sion returns the value with a newline but doesn’t write anything to $thePage.
261
j e
Trang 5The gAddText()method isn’t necessary, but I included it for completeness function addText($content){
//given any text (including HTML markup) //adds the text to the page
$this->thePage = $content;
$this->thePage = “\n”;
} // end addText
function gAddText($content){
//given any text (including HTML markup) //returns the text
$temp= $content;
$temp = “\n”;
return $temp;
} // end addText
Building the Top of the Page
The top of almost every Web page I make is nearly identical, so I wanted a func-tion to automatically build that stuff for me The buildTop() method takes a multi-line string of all my favorite page-beginning code and adds it to the page using the addText()method
function buildTop(){
$temp = <<<HERE
<!doctype html public “-//W3C//DTD HTML 4.0 //EN”>
<html>
<head>
<title>$this->title</title>
</head>
<body>
<center>
<h1>$this->title</h1>
</center>
HERE;
$this->addText($temp);
} // end buildTop;
If you want a different beginning code (a particular CSS style, for example), you can override my buildTop()with one that includes your own code
262
l u