Skip to content

Understanding Object-Oriented Programming (OOP) in PHP

Object-Oriented Programming (OOP) is a programming paradigm that is based on the concept of "objects", which can contain data and code that operates on that data. OOP allows developers to create complex and dynamic web applications with reusable and modular code. In PHP, OOP is an essential part of the language and is widely used by developers to create scalable and maintainable applications.

What are Classes and Objects in PHP OOP?

Classes are blueprint definitions for creating objects in PHP. Classes can contain properties (variables) and methods (functions). Objects are instances of classes, created using the new keyword. The properties of an object store its data and the methods operate on that data. Classes and objects are the building blocks of OOP in PHP.

Defining Classes in PHP

Classes in PHP are defined using the class keyword, followed by the name of the class. The properties and methods of a class are defined inside the class definition, within curly braces ({}). Here is an example of a class definition in PHP:

Example of a class definition in PHP

php
class User {
    public $username;
    public $email;
    public function __construct($username, $email) {
        $this->username = $username;
        $this->email = $email;
    }
    public function getUsername() {
        return $this->username;
    }
    public function getEmail() {
        return $this->email;
    }
}

In this example, the User class has two properties, $username and $email, and two methods, getUsername() and getEmail(). The __construct method is a special method in PHP that is called when an object is created from a class.

Creating Objects from Classes

To create an object from a class, use the new keyword, followed by the name of the class. Here is an example of how to create an object from the User class:

PHP create an object from a class by using new keyword

php
$user = new User("John Doe", "[email protected]");

This creates a new User object and stores it in the variable $user. You can access the properties and methods of the object using the arrow operator (->). Here is an example of how to access the properties and methods of the $user object:

PHP access the properties and methods of the object using the arrow operator

php
echo $user->username; // Outputs: "John Doe"
echo $user->email; // Outputs: "[email protected]"
echo $user->getUsername(); // Outputs: "John Doe"
echo $user->getEmail(); // Outputs: "[email protected]"

Inheritance in PHP OOP

Inheritance is a feature of OOP that allows classes to inherit properties and methods from parent classes. This allows developers to create new classes that are based on existing classes, without having to write all the code again. In PHP, inheritance is defined using the extends keyword. Here is an example of inheritance in PHP:

PHP example of inheritance is a feature of OOP that allows classes

php
class Admin extends User {
    public $permissions;
    public function __construct($username, $email, $permissions) {
        parent::__construct($username, $email);
        $this->permissions = $permissions;
    }
    public function getPermissions() {
       return $this->permissions;
   }
}

In this example, the Admin class extends the User class and inherits its properties and methods. The Admin class also has its own property, $permissions, and method, getPermissions(). The parent:: keyword is used to call the parent class's \_\_construct method, allowing the Admin class to reuse the logic from the User class.

Polymorphism in PHP OOP

Polymorphism is a feature of OOP that allows objects of different classes to be treated as objects of the same class. This allows developers to write generic code that can work with objects of different classes, as long as they have the same methods. In PHP, polymorphism is achieved by defining common methods in parent classes and implementing them in child classes. Here is an example of polymorphism in PHP:

Example of polymorphism in PHP

php
<?php

class User
{
    public $username;
    public $email;

    public function __construct($username, $email)
    {
        $this->username = $username;
        $this->email = $email;
    }
    public function getUsername()
    {
        return $this->username;
    }
    public function getEmail()
    {
        return $this->email;
    }

    public function showInfo()
    {
        echo "Username: " . $this->username . "\n";
        echo "Email: " . $this->email . "\n";
    }
}

class Admin extends User
{
    public $permissions;
    public function __construct($username, $email, $permissions)
    {
        parent::__construct($username, $email);
        $this->permissions = $permissions;
    }
    public function getPermissions()
    {
        return $this->permissions;
    }

    public function showInfo()
    {
        parent::showInfo();
        echo "Permissions: " . $this->permissions . "\n";
    }
}

$user = new User("John Doe", "[email protected]");
$admin = new Admin("Jane Doe", "[email protected]", ["read", "write", "delete"]);

$users = [$user, $admin];

foreach ($users as $user) {
    $user->showInfo();
}

In this example, the User class and the Admin class both have a showInfo() method. When the showInfo() method is called on an object, the correct implementation of the method is called, based on the type of the object. This allows the foreach loop to treat the $user and $admin objects as objects of the same type, even though they are instances of different classes.

Conclusion

Object-Oriented Programming (OOP) is a powerful programming paradigm that is widely used in PHP for creating scalable and maintainable web applications. Classes and objects are the building blocks of OOP in PHP, and inheritance and polymorphism are two of the key features that allow developers to write efficient and reusable code. Whether you are just starting out with PHP or are a seasoned developer, understanding the basics of OOP in PHP is essential for creating high-quality web applications.

Practice

In PHP, what are the characteristics and functionalities of Objects and Classes?

Dual-run preview — compare with live Symfony routes.