JavaScript Editor Javascript debugger     Website design 

Constructors and Destructors

Constructor

PHP 5 allows developers to declare constructor methods for classes. Classes which have a constructor method call this method on each newly-created object, so it is suitable for any initialization that the object may need before it is used.

Note:

Parent constructors are not called implicitly if the child class defines a constructor. In order to run a parent constructor, a call to parent::__construct() within the child constructor is required.

Example 10.8. using new unified constructors

<?php
class BaseClass {
  function
__construct() {
      print
"In BaseClass constructor\n";
  }
}

class
SubClass extends BaseClass {
  function
__construct() {
     
parent::__construct();
      print
"In SubClass constructor\n";
  }
}

$obj = new BaseClass();
$obj = new SubClass();
?>


For backwards compatibility, if PHP 5 cannot find a __construct() function for a given class, it will search for the old-style constructor function, by the name of the class. Effectively, it means that the only case that would have compatibility issues is if the class had a method named __construct() which was used for different semantics.

Destructor

PHP 5 introduces a destructor concept similar to that of other object-oriented languages, such as C++. The destructor method will be called as soon as all references to a particular object are removed or when the object is explicitly destroyed or in any order in shutdown sequence.

Example 10.9. Destructor Example

<?php
class MyDestructableClass {
  function
__construct() {
      print
"In constructor\n";
     
$this->name = "MyDestructableClass";
  }

  function
__destruct() {
      print
"Destroying " . $this->name . "\n";
  }
}

$obj = new MyDestructableClass();
?>


Like constructors, parent destructors will not be called implicitly by the engine. In order to run a parent destructor, one would have to explicitly call parent::__destruct() in the destructor body.

Note:

Destructors called during the script shutdown have HTTP headers already sent. The working directory in the script shutdown phase can be different with some SAPIs (e.g. Apache).

Note:

Attempting to throw an exception from a destructor (called in the time of script termination) causes a fatal error.