Every class definition begins with the keyword class, followed by a class
name, which can be any name that isn't a reserved
word in PHP. Followed by a pair of curly braces, of
which contains the definition of the classes members and methods. A
pseudo-variable, $this is available when a method is
called from within an object context. $this is a
reference to the calling object (usually the object to which the method
belongs, but can be another object, if the method is called
statically from the context
of a secondary object). This is illustrated in the following example:
Example 19-1. $this variable in object-oriented language
<?php class A { function foo() { if (isset($this)) { echo '$this is defined ('; echo get_class($this); echo ")\n"; } else { echo "\$this is not defined.\n"; } } }
class B { function bar() { A::foo(); } }
$a = new A(); $a->foo(); A::foo(); $b = new B(); $b->bar(); B::bar(); ?>
|
The above example will output: $this is defined (a)
$this is not defined.
$this is defined (b)
$this is not defined. |
|
Example 19-2. Simple Class definition
<?php class SimpleClass { // member declaration public $var = 'a default value';
// method declaration public function displayVar() { echo $this->var; } } ?>
|
|
To create an instance of an object, a new object must be created and
assigned to a variable. An object will always be assigned when
creating a new object unless the object has a
constructor defined that throws an
exception on error.
Example 19-3. Creating an instance
<?php $instance = new SimpleClass(); ?>
|
|
When assigning an already created instance of an object to a new variable, the new variable
will access the same instance as the object that was assigned. This
behaviour is the same when passing instances to a function. A new instance
of an already created object can be made by
cloning it.
Example 19-4. Object Assignment
<?php $assigned = $instance; $reference =& $instance;
$instance->var = '$assigned will have this value';
$instance = null; // $instance and $reference become null
var_dump($instance); var_dump($reference); var_dump($assigned); ?>
|
The above example will output: NULL
NULL
object(SimpleClass)#1 (1) {
["var"]=>
string(30) "$assigned will have this value"
} |
|
A class can inherit methods and members of another class by using the
extends keyword in the declaration. It is not possible to extend multiple
classes, a class can only inherit one base class.
The inherited methods and members can be overridden, unless the parent
class has defined a method as final,
by redeclaring them within the same name defined in the parent class.
It is possible to access the overrided method or members by
referencing them with parent::
Example 19-5. Simple Class Inherintance
<?php class ExtendClass extends SimpleClass { // Redefine the parent method function displayVar() { echo "Extending class\n"; parent::displayVar(); } }
$extended = new ExtendClass(); $extended->displayVar(); ?>
|
The above example will output: Extending class
a default value |
|