V²straha |
In PHP 3 and PHP 4 constructors behave differently. The PHP 4
semantics are strongly preferred.
|
Constructors are functions in a class that are automatically
called when you create a new instance of a class with
new. In PHP 3, a
function becomes a constructor when it has the same name as
the class. In PHP 4, a function becomes a constructor, when
it has the same name as the class it is defined in - the
difference is subtle, but crucial (see below).
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.
V²straha |
In PHP 3, derived classes and constructors have a number of
limitations. The following examples should be read carefully
to understand these limitations.
|
In PHP 3, no constructor is being called in the above example.
The rule in PHP 3 is: 'A constructor is a function of the same
name as the class.'. The name of the class is B, and there is
no function called B() in class B. Nothing happens.
This is fixed in PHP 4 by introducing another rule: If a class
has no constructor, the constructor of the base class is being
called, if it exists. The above example would have printed
'I am the constructor of A.<br>' in PHP 4.
In PHP 3, the function B() in class A will suddenly become a
constructor in class B, although it was never intended to be.
The rule in PHP 3 is: 'A constructor is a function of the same
name as the class.'. PHP 3 does not care if the function is
being defined in class B, or if it has been inherited.
This is fixed in PHP 4 by modifying the rule to: 'A constructor
is a function of the same name as the class it is being defined
in.'. Thus in PHP 4, the class B would have no constructor function
of its own and the constructor of the base class would have been
called, printing 'I am the constructor of A.<br>'.
V²straha |
Neither PHP 3 nor PHP 4 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.
|
Poznßmka:
There are no destructors in PHP 3 or PHP 4. You may use
register_shutdown_function() instead
to simulate most effects of destructors.
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.