Constructors are functions in a class that are automatically
called when you create a new instance of a class with
new. A function becomes a constructor, when
it has the same name as the class. If a class
has no constructor, the constructor of the base class is being
called, if it exists.
<?php class Auto_Cart extends Cart { function Auto_Cart() { $this->add_item("10", 1); } } ?>
|
This defines a class Auto_Cart that is a Cart plus a constructor
which initializes the cart with one item of article number "10"
each time a new Auto_Cart is being made with "new". Constructors
can take arguments and these arguments can be optional, which
makes them much more useful. To be able to still use the class
without parameters, all parameters to constructors should be
made optional by providing default values.
<?php class Constructor_Cart extends Cart { function Constructor_Cart($item = "10", $num = 1) { $this->add_item ($item, $num); } } // Shop the same old boring stuff. $default_cart = new Constructor_Cart; // Shop for real... $different_cart = new Constructor_Cart("20", 17); ?>
|
You also can use the @ operator to
mute errors occurring in the constructor, e.g.
@new.
<?php class A { function A() { echo "I am the constructor of A.<br />\n"; }
function B() { echo "I am a regular function named B in class A.<br />\n"; echo "I am not a constructor in A.<br />\n"; } }
class B extends A { }
// This will call B() as a constructor $b = new B; ?>
|
The function B() in class A will suddenly become a
constructor in class B, although it was never intended to be.
PHP 4 does not care if the function is
being defined in class B, or if it has been inherited.
Предостережение |
PHP 4 doesn't call constructors of the base class
automatically from a constructor of a derived class. It is
your responsibility to propagate the call to constructors
upstream where appropriate.
|
Destructors are functions that are called automatically
when an object is destroyed, either with unset()
or by simply going out of scope. There are no destructors
in PHP. You may use register_shutdown_function()
instead to simulate most effects of destructors.