PHP OOP Constructor
In PHP Object-Oriented Programming (OOP), a constructor is a special method that is automatically called when an instance (or object) of a class is created. Constructors are typically used to initialize object properties and perform any setup required when the object is created.
Defining a Constructor
In PHP, a constructor is defined using the method name __construct()
. The double underscores (__
) indicate that it is a magic method, which has a special purpose in the language.
Example of a Constructor
class Car {
public $make;
public $model;
// Constructor to initialize properties
public function __construct($make, $model) {
$this->make = $make;
$this->model = $model;
echo "Car created: $make $model<br>";
}
}
// Creating an instance of Car
$myCar = new Car("Toyota", "Corolla"); // Output: Car created: Toyota Corolla
In this example:
- The constructor
__construct()
takes two parameters,$make
and$model
, to initialize the object properties. - When
new Car("Toyota", "Corolla")
is called, the__construct()
method is automatically invoked, setting$make
and$model
properties and printing a message.
The $this
Keyword
The $this
keyword is used inside the constructor to refer to the current instance of the class. It allows you to set properties or call other methods on the specific instance being created.
Example:
class Person {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
public function introduce() {
echo "Hi, I'm $this->name and I'm $this->age years old.<br>";
}
}
$person1 = new Person("Alice", 25);
$person1->introduce(); // Output: Hi, I'm Alice and I'm 25 years old.
In this example:
- The constructor takes
$name
and$age
parameters and initializes thePerson
object properties. $this->name
and$this->age
refer to the properties of the current instance.
Default Values in Constructor
A constructor can also have default parameter values in case no arguments are provided when creating an object.
Example:
class Animal {
public $species;
public $name;
public function __construct($species = "Unknown", $name = "No Name") {
$this->species = $species;
$this->name = $name;
}
public function describe() {
echo "$this->name is a $this->species.<br>";
}
}
$animal1 = new Animal("Dog", "Buddy");
$animal1->describe(); // Output: Buddy is a Dog.
$animal2 = new Animal();
$animal2->describe(); // Output: No Name is a Unknown.
In this example:
- If the constructor is called without arguments, the default values
"Unknown"
and"No Name"
are used.
Constructors in Inheritance
When dealing with inheritance, constructors from parent classes can be accessed by child classes. You can use the parent::__construct()
syntax to call the constructor of the parent class.
Example:
class Vehicle {
public $make;
public function __construct($make) {
$this->make = $make;
echo "Vehicle make: $make<br>";
}
}
class Car extends Vehicle {
public $model;
public function __construct($make, $model) {
parent::__construct($make); // Calling parent class constructor
$this->model = $model;
echo "Car model: $model<br>";
}
}
$myCar = new Car("Toyota", "Camry");
// Output:
// Vehicle make: Toyota
// Car model: Camry
In this example:
- The
Car
class inherits from theVehicle
class. - The
Car
class constructor callsparent::__construct($make)
to invoke the parent constructor before setting its own properties.
Overriding Constructors
In a derived (child) class, you can override the constructor of the parent class by defining your own __construct()
method. When you do this, the child class will use its own constructor instead of the parent class’s constructor unless you explicitly call the parent's constructor.
Example:
class ParentClass {
public function __construct() {
echo "Parent class constructor called.<br>";
}
}
class ChildClass extends ParentClass {
public function __construct() {
parent::__construct(); // Optional: call the parent constructor
echo "Child class constructor called.<br>";
}
}
$child = new ChildClass();
// Output:
// Parent class constructor called.
// Child class constructor called.
In this example:
- The child class constructor overrides the parent class constructor.
- By calling
parent::__construct()
, the constructor of the parent class is also executed.
Constructor Overloading
PHP does not support constructor overloading in the way that some other languages do, meaning you cannot define multiple constructors with different parameter lists. Instead, you can use default parameter values or implement a single constructor that can handle various cases based on the arguments provided.
Example:
class Product {
public $name;
public $price;
public function __construct($name = "Generic Product", $price = 0) {
$this->name = $name;
$this->price = $price;
}
public function getInfo() {
echo "$this->name costs $$this->price.<br>";
}
}
$product1 = new Product("Laptop", 1500);
$product1->getInfo(); // Output: Laptop costs $1500.
$product2 = new Product();
$product2->getInfo(); // Output: Generic Product costs $0.
In this example:
- The constructor is defined in a way that allows it to handle both full and partial initializations using default values.
Destructor (__destruct()
)
Alongside the constructor, PHP also has a destructor method, __destruct()
, which is automatically called when there are no more references to an object, such as when the script ends or an object is explicitly unset. Destructors are often used for cleanup activities.
Example of a Destructor:
class FileHandler {
private $file;
public function __construct($filename) {
$this->file = fopen($filename, "w");
echo "File opened.<br>";
}
public function __destruct() {
fclose($this->file);
echo "File closed.<br>";
}
}
$fileHandler = new FileHandler("example.txt");
// Output:
// File opened.
// File closed (when script ends or object is destroyed).
Summary
- A constructor is a special method called automatically when a new object is created.
- In PHP, the constructor is defined using
__construct()
. - Constructors are used to initialize properties and set up the state of an object.
- The
$this
keyword is used in constructors to refer to the current instance of the class. - Inheritance allows a child class to call the constructor of its parent class using
parent::__construct()
. - PHP does not support multiple constructors, but default values or flexible parameter handling can achieve similar functionality.
- A destructor (
__destruct()
) is used for cleanup and is called automatically when the object is no longer needed.
Constructors are an important part of OOP in PHP, enabling developers to create objects with a specific initial state, thereby making the code cleaner and easier to maintain.