PHP Abstract and Interface, a funny and easy-to-understand

·

·

,
PHP Abstract and Interface

Imagine you’re the manager of a Circus. Now, within this circus, you have different performers like Jugglers, Clowns, Fire-breathers, etc. As the manager, you don’t necessarily care how each performer carries out their act (how a clown tells his jokes or how a fire-breather breathes fire). What you do care about is that each performer has an act to perform.

This is where our first concept comes in: Abstract Classes. Picture this as the general “Performers” class in your circus. It might have a method ‘performAct()‘ that every performer class (like Jugglers, Clowns) MUST do, but the way they do it depends on the type of performer. This ‘performAct()‘ method would be an abstract method, with no implementation in the parent abstract class, but a strict order that child classes must ‘performAct()‘ in their individual way.

Here’s a simple PHP representation:

abstract class Performer {
    abstract public function performAct();
}

class Clown extends Performer {
    public function performAct() {
        // Clown's way of performing act
    }
}

class Juggler extends Performer {
    public function performAct() {
        // Juggler's way of performing act
    }
}

Now, onto the second concept: Interfaces. Imagine now that we have some performers who ride unicycles. It doesn’t matter if they are clowns, jugglers, or even a fire-breather. If they’re unicycle riders, they all need to know how to ‘rideUnicycle()‘. It’s an extra skill beyond their regular act, not all performers will have it. ‘rideUnicycle()‘ is not necessarily related to their main act but an additional thing they do.

That would be an interface, ‘UnicycleRiders‘! You’re not telling them how to ride it, you’re just saying, “If you’re a unicycle rider, you better know how to do this”.

And here’s the PHP code:

interface UnicycleRiders {
   public function rideUnicycle();
}

class Clown extends Performer implements UnicycleRiders {
    public function performAct() {
        // Clown's way of performing act
    }

    public function rideUnicycle() {
        // Clown's way of riding unicycle
    }
}

When to use which?

Abstract classes are typically used when similar classes have the same behavior (methods) and some shared data (properties). It’s said they have a rich relationship.

Interfaces, on the other hand, are used when we want to specify a method that classes should implement, but they’re unrelated. It’s like a label saying, “I promise I do have this functionality”. They have a “need-to-know” relationship.

The big lesson: Abstract classes dictate “who you are” and Interfaces dictate “what you can do“.

Meet the author

Faisal Ahammad

I’m a former Support Engineer at Saturday Drive Inc. (AKA Ninja Forms) and a GTE for the #bn_BD language. As an active contributor to WordPress, I have contributed to over 60 themes, plugins, and the WordPress core. I also run a small YouTube channel where I share my knowledge.

Leave a Reply

Your email address will not be published. Required fields are marked *

More from the blog


Recommended Topics


Popular Tags

formidable forms free stuff gravity forms ninja forms oop open source php top cash back Topcashback wordpress