I'm going to assume that you are already familiar with object oriented
programming, if you're not, I suggest you get familiar with it before
proceeding with this tutorial. You may also want to look in the PHP5
manual's section on object orientation so that all this makes more sense to
you.
We'll begin with "porting" the simple Hello World! program to an object
oriented nature, so that you can grasp the concept quickly. The first thing
you have to do is to create a class. The most easy way to make your class
is to extend one of the PHP-GTK 2 classes. Now, most applications have a
GtkWindow as their top level widget. So does our
Hello World program. So what we're going to do is to create a class that
extends GtkWindow, so that it
makes our job easier:
<?php
class Hello extends GtkWindow
{
// code goes here.
}
?> |
Now we need to design the constructor of our class (a function that is
called when an object of our class is created). Let's think about what we
need to put in the constructor. Since the constructor is the first thing to
be called when an object of our class is created, we must put all the design
aspects of our program in the constructor. That means that the constructor
is the place where we create all the widgets that we require, design our
layout (see
Packing Widgets) and
finalize how our application should look.
Now, our class extends GtkWindow, but that doesn't
mean that GtkWindow's constructor is called
automatically. This is the default behavior of PHP5 and hence we must call
GtkWindow's constructor explicitly, using the
parent keyword:
class Hello extends GtkWindow
{
function __construct()
{
parent::__construct();
}
} |
This means that a GtkWindow will be created (with no parameters passed to
its constructor) whenever an object of our class "Hello" is created. Now the
question of how to access the newly created window arises. The
this keyword comes to our help! Using that keyword we can
modify all aspects of our newly created window:
function __construct()
{
parent::__construct();
$this->set_title('Hello World!');
$this->connect_simple('destroy', array('gtk', 'main_quit'));
} |
Since this is a very simple program, we can finish all our tasks in the
constructor itself. We simply put the code that we put in our procedural
program into the constructor here. So we have the final program:
Example 8.1. Hello World - The Object Oriented Style
<?php
class Hello extends GtkWindow
{
function __construct()
{
parent::__construct();
$this->set_title('Hello World');
$this->connect_simple('destroy', array('gtk', 'main_quit'));
$label = new GtkLabel("Just wanted to say\r\n'Hello World!'");
$this->add($label);
$this->show_all();
}
}
new Hello();
Gtk::main();
?> |
Although this is hardly a great example to show the way to program in an
object-oriented manner, it should help most of you get started. We'll look
into some of the more advanced concepts now.