Using Abstract Classes and Interfaces

Tutorial 4 of 5

1. Introduction

1.1 Brief explanation of the tutorial's goal

This tutorial aims to provide a comprehensive understanding of abstract classes and interfaces in PHP. These are powerful programming constructs that help design more reusable and flexible code.

1.2 What the user will learn

By the end of this tutorial, you'll be familiar with:
- The concepts of abstract classes and interfaces.
- When and how to use abstract classes and interfaces.
- How to design more flexible and reusable code.

1.3 Prerequisites

This tutorial assumes you have a basic understanding of PHP programming, including classes and objects.

2. Step-by-Step Guide

2.1 Introduction to Abstract Classes

In PHP, a class that contains at least one abstract method is called an abstract class. An abstract method is a method declared with the keyword abstract and does not have any body.

abstract class AbstractClass {
    // Abstract method with no implementation
    abstract protected function someMethod();
}

Note: You cannot create an instance of an abstract class.

2.2 Introduction to Interfaces

An interface is a contract or protocol for what methods a class should implement. The interface defines the 'what' part of the syntactical contract and the class defines the 'how' part of the syntactical contract.

interface InterfaceName {
    public function someMethod();
}

2.3 Best Practices

  • Use abstract classes when you want to provide common implementation to other derived classes.
  • Use interfaces when you want to define a role that other classes can play, regardless of where they fit into the class hierarchy.

3. Code Examples

3.1 Abstract Class Example

abstract class Animal {
    // Abstract method
    abstract protected function makeSound();

    // Common method
    public function display() {
        echo "This is an animal.<br>";
    }
}

class Dog extends Animal {
    public function makeSound() {
        echo "Woof!<br>";
    }
}

$dog = new Dog();
$dog->display();
$dog->makeSound();

In this example, we have an abstract class Animal with an abstract method makeSound(). The Dog class extends Animal and implements the makeSound() method.

Expected output:

This is an animal.
Woof!

3.2 Interface Example

interface Flyable {
    public function fly();
}

class Bird implements Flyable {
    public function fly() {
        echo "The bird is flying.<br>";
    }
}

$bird = new Bird();
$bird->fly();

In this example, we have an interface Flyable with a method fly(). The Bird class implements this interface and defines the fly() method.

Expected output:

The bird is flying.

4. Summary

  • An abstract class can have both abstract methods (methods without bodies) and non-abstract methods (regular methods with bodies).
  • An interface is a contract that contains empty methods (without bodies) that the class implementing the interface must define.
  • Abstract classes and interfaces allow you to write more flexible and reusable code.

5. Practice Exercises

5.1 Exercise 1:

Create an abstract class Shape with an abstract method calculateArea(). Implement this class in two different classes: Rectangle and Circle.

5.2 Exercise 2:

Create an interface Drawable with a method draw(). Implement this interface in two classes: Square and Ellipse.

5.3 Tips for further practice

Try to implement multiple interfaces in a single class and extend a class from an abstract class, so you can understand the flexibility of PHP classes. Also, try to create an interface that extends from another interface.