The new object model
The PHP5 object model has been revamped adding a lot of features that will give PHP5 a
Java flavour. The following section of this article will describe this new object model
and some quick examples that you can use as a starting point for your experiments.
Java flavour. The following section of this article will describe this new object model
and some quick examples that you can use as a starting point for your experiments.
- Constructors and destructors
- Objects as references
- Cloning objects
- Private, Public and Protected keywords
- Interfaces
- Abstract classes
- __call
- __set and __get
- Static members
Constructors and Destructors
In PHP4 constructors are named as the class and there are no destructors.
In PHP5 the constructor for a class is called __construct and the destructor is called __destruct.
In PHP5 the constructor for a class is called __construct and the destructor is called __destruct.
Example 1: Constructors and destructors
<?php
class foo {
var $x;
function
__construct($x) {
$this->x = $x;
}
function
display() {
print($this->x);
}
function
__destruct() {
print("bye bye");
}
}
$o1 = new foo(4);
$o1->display();
?>
As you will see the destructor will be called just before the object is eliminated.
Objects as References
In PHP4 as you may already know variables are passed to functions/methods by value (a copy is passed) unless
you use the ‘&’ symbol in the function declaration indicating that the variable will be passed as a reference.
In PHP5 objects will be passed always as references. Object assignation is also done by reference.
you use the ‘&’ symbol in the function declaration indicating that the variable will be passed as a reference.
In PHP5 objects will be passed always as references. Object assignation is also done by reference.
Example 2: Objects as references
<?php
class foo {
var $x;
function
setX($x) {
$this->x = $x;
}
function
getX() {
return $this->x;
}
}
$o1 = new foo;
$o1->setX(4);
$o2 = $o1;
$o1->setX(5);
if($o1->getX() == $o2->getX()) print("Oh my god!");
?>