Skip to main content

Abstraction

Chapter Overview

In this chapter you will learn:

  • What abstraction means
  • Why abstraction exists
  • Real life examples
  • How abstraction works internally
  • Difference between abstraction and encapsulation
  • Abstract thinking in software engineering
  • Abstract classes
  • Interfaces
  • Framework architecture
  • PocketMine examples
  • Enterprise examples
  • Design principles using abstraction
  • Best practices
  • Projects and exercises

What is Abstraction?

Abstraction means:

Hiding unnecessary implementation details
and exposing only essential functionality.

Or simply:

Focus on WHAT something does,
not HOW it does it.

Real Life Example

When driving a car:

You use:

  • Steering Wheel
  • Brake
  • Accelerator
  • Gear

You do NOT need to know:

  • Engine combustion
  • Fuel injection timings
  • ECU calculations
  • Gear synchronization
  • Piston movement
  • Sensor communication

All of that complexity is hidden.

This is abstraction.


Another Example

Think about a television.

You press:

Power Button

You do not care:

Voltage calculations
Motherboard signals
Display drivers
Hardware initialization

You simply care:

TV Turns On

This is abstraction.


Programming Example

Without abstraction:

$socket = socket_create(...);

$packet = PacketEncoder::encode(...);

$compressed =
Compression::compress(
$packet
);

socket_write(
$socket,
$compressed
);

Very complicated.


With abstraction:

$player->sendMessage(
"Hello"
);

Much simpler.


Definition

Abstraction helps developers:

✅ Reduce complexity

✅ Write cleaner code

✅ Reuse code

✅ Understand systems easier

✅ Hide internals


Why Abstraction Exists

Imagine if every developer had to understand:

  • CPU Instructions
  • Networking Packets
  • Operating System APIs
  • Memory Management

before sending a chat message.

Software development would become impossible.

Abstraction allows developers to build:

Complex Systems
using
Simple Building Blocks

Layers of Abstraction

Modern software consists of multiple layers.

Example:

Application

Framework

Libraries

Operating System

Kernel

Hardware

Every layer hides complexity.


Example

When using:

echo "Hello";

PHP internally performs:

Output Buffer
Encoding
Stream Handling
Operating System Calls
Terminal Drivers

You never see these details.

This is abstraction.


Visualization

You

sendMessage()

Packet Creation

Compression

Encryption

Socket Sending

Client Receives Message

Only one line of code is visible.


Real PocketMine Example

You write:

$player->teleport(
$position
);

Internally PocketMine does:

Chunk Validation
Event Calling
Movement Validation
Position Update
Network Packet Sending
Client Synchronization

You never see this.

This is abstraction.


Example

$player->kick(
"Cheating"
);

Internally:

Disconnect Packet
Session Closing
Player Saving
Event Dispatching
Plugin Handling

All hidden.


Database Example

You write:

$user = User::find(1);

Internally:

Connection Pool
SQL Generation
Prepared Statements
Result Parsing
Object Creation
Caching

All hidden.


The Main Goal

Abstraction answers:

What can I do?

Instead of:

How is it implemented?

High Level vs Low Level


High Level

$mail->send();

Simple.


Low Level

Socket
SMTP Packets
Authentication
Headers
Encoding
Compression

Complex.


Example

Without abstraction:

Packet::create();
Packet::compress();
Packet::send();

With abstraction:

$player->sendMessage();

Abstraction in Frameworks

Frameworks exist because of abstraction.

Examples:

  • Laravel
  • Symfony
  • PocketMine
  • Nukkit
  • DragonFly

All hide complexity.


Example

Laravel:

User::create([
"name" => "Aayan"
]);

Internally:

SQL Generation
Database Connection
Validation
Mass Assignment Protection
Events

Hidden.


Abstraction Everywhere

Examples:

Browser APIs
Operating Systems
Databases
Game Engines
Networking
Cloud Services

Everything uses abstraction.


Difference Between Abstraction and Encapsulation

Many beginners confuse these.


Abstraction

Hides complexity.


Encapsulation

Hides data.


Example


Abstraction

$car->start();

You don't know HOW.


Encapsulation

private Engine $engine;

You cannot access it directly.


Comparison Table

FeatureAbstractionEncapsulation
Hides Complexity
Hides Data
FocusWhatProtection
UsesInterfaces, Abstract ClassesAccess Modifiers

Abstraction in OOP

PHP mainly provides abstraction through:

1. Abstract Classes
2. Interfaces

Abstract Thinking

Consider:

Animal

What is an animal?

Animals:

  • Eat
  • Sleep
  • Move

This becomes an abstraction.


Dog:

Dog IS AN Animal

Cat:

Cat IS AN Animal

Bird:

Bird IS AN Animal

Abstract Class Example

abstract class Animal {

abstract public function sound();

}

Children:

class Dog
extends Animal {

public function sound() {

echo "Bark";

}

}

class Cat
extends Animal {

public function sound() {

echo "Meow";

}

}

Why?

Because every animal has:

sound()

But implementation differs.


Interface Example

interface Logger {

public function log(
string $message
);

}

Implementations:

File Logger
Discord Logger
Database Logger

Real World Architecture

Application

Service

Repository

Database

Every layer abstracts another layer.


PocketMine Architecture Example

Plugin developer writes:

$this->getServer()

Internally:

PluginBase

Server Singleton

WorldManager

Network

Scheduler

Hidden complexity.


Another Example

You use:

$world->getPlayers();

Internally:

Chunk Manager
Entity Manager
Session Manager
Collections

All hidden.


Benefits of Abstraction


1. Simpler Code

Instead of:

200 lines

You write:

$player->kick();

2. Better Readability

Example:

$order->pay();

Much easier.


3. Easier Maintenance

Internal implementation can change.

Outside code remains same.


Example

Today:

File Database

Tomorrow:

MySQL

Outside code:

$user->save();

never changes.


4. Scalability

Large systems depend heavily on abstraction.

Without it:

Projects become impossible.


Enterprise Example

Payment System:

PaymentGateway

PayPal
Stripe
Crypto
UPI

Everything follows abstraction.


Software Layers Example

Controller

Service

Repository

Database

Every layer abstracts another.


PocketMine Example

Plugin

API

Server

Network

Bad Example

Socket::write();
Compression::compress();

Plugin developers should never do this.


Good Example

$player->sendMessage();

Common Beginner Mistakes


Confusing Encapsulation and Abstraction

Remember:

Abstraction = Hiding Complexity
Encapsulation = Hiding Data

Creating Too Many Layers

Bad:

Service
ServiceManager
ServiceController
ServiceHandler

Overengineering.


Exposing Internals

Bad:

public Socket $socket;

Best Practices

✅ Hide complexity.

✅ Expose simple APIs.

✅ Keep interfaces small.

✅ Use meaningful names.

✅ Do not leak implementation details.


Real Framework Examples


Laravel

User::find();

PocketMine

$player->teleport();

Symfony

$mailer->send();

DragonFly

session.SendMessage();

All are abstractions.


Mini Project

Create:

Payment System

Classes:

PaymentGateway
StripeGateway
PayPalGateway
CryptoGateway

Expose:

pay()

Hide everything else.


Exercises


Exercise 1

Create:

abstract class Vehicle

Methods:

start()
move()
stop()

Exercise 2

Create:

Animal
Dog
Cat
Bird

Exercise 3

Create:

Notifier
EmailNotifier
DiscordNotifier
SMSNotifier

Interview Questions


What is abstraction?

Hiding implementation details and exposing only required functionality.


Why is abstraction important?

Because it reduces complexity.


Which PHP features provide abstraction?

Abstract Classes
Interfaces

Difference between abstraction and encapsulation?

Abstraction → Hides complexity

Encapsulation → Hides data

Summary

Abstraction:

✅ Reduces complexity

✅ Makes systems easier

✅ Allows large architectures

✅ Enables frameworks

✅ Makes code maintainable


References

https://www.php.net/manual/en/language.oop5.abstract.php

https://www.php.net/manual/en/language.oop5.interfaces.php


Next Chapter

➡ Interfaces

➡ Abstract Classes

➡ Traits