Encapsulation and Abstraction in PHP

Welcome to another thrilling chapter of Object-Oriented Programming (OOP) in PHP!  Today, we’re diving into two more powerful concepts: Encapsulation and Abstraction. These concepts will help you write secure, well-structured, and maintainable code. So buckle up, because this is going to be fun and educational!

What is Encapsulation?

Encapsulation is all about hiding the details and exposing only what’s necessary. It helps in protecting data and controlling how it’s accessed.

Imagine you own a bank. You don’t want customers to directly change their balance, right? Instead, they should withdraw() or deposit() money safely.

Example: Using Encapsulation in PHP

class BankAccount {
    private $balance;
    
    public function __construct($initialBalance) {
        $this->balance = $initialBalance;
    }
    
    public function deposit($amount) {
        $this->balance += $amount;
        return "Deposited: $$amount. New Balance: $$this->balance";
    }
    
    public function withdraw($amount) {
        if ($amount > $this->balance) {
            return "Insufficient funds!";
        }
        $this->balance -= $amount;
        return "Withdrawn: $$amount. New Balance: $$this->balance";
    }
    
    public function getBalance() {
        return $this->balance;
    }
}

$account = new BankAccount(1000);
echo $account->deposit(500);  // Output: Deposited: $500. New Balance: $1500
echo $account->withdraw(2000); // Output: Insufficient funds!
echo $account->withdraw(300);  // Output: Withdrawn: $300. New Balance: $1200

Key Takeaways:

 private properties protect data from direct modification. Methods like deposit() and withdraw() control access to data.

What is Abstraction?

Abstraction is about hiding complexity and showing only the necessary details. It makes code simpler and more flexible.

Imagine using a coffee machine. You don’t need to know how it works internally. You just press a button, and magic happens!

Example: Implementing Abstraction in PHP

abstract class Vehicle {
    protected $brand;
    
    public function __construct($brand) {
        $this->brand = $brand;
    }
    
    abstract public function startEngine();
}

class Car extends Vehicle {
    public function startEngine() {
        return "$this->brand car engine started! Vroom Vroom!";
    }
}

class Motorcycle extends Vehicle {
    public function startEngine() {
        return "$this->brand motorcycle engine started! Brrrm Brrrm!";
    }
}

$car = new Car("Toyota");
$bike = new Motorcycle("Ducati");

echo $car->startEngine(); // Output: Toyota car engine started! Vroom Vroom!
echo $bike->startEngine(); // Output: Ducati motorcycle engine started! Brrrm Brrrm!

Key Takeaways:

 abstract classes define common behavior without implementation. Subclasses must implement the abstract method.

Real-World Example: Online Payment System

Let’s build a payment system where different payment methods share the same structure but work differently.

abstract class Payment {
    abstract public function processPayment($amount);
}

class CreditCardPayment extends Payment {
    public function processPayment($amount) {
        return "Paid $$amount using Credit Card";
    }
}

class PayPalPayment extends Payment {
    public function processPayment($amount) {
        return "Paid $$amount using PayPal";
    }
}

$creditCard = new CreditCardPayment();
$paypal = new PayPalPayment();

echo $creditCard->processPayment(100); // Output: Paid $100 using Credit Card

echo $paypal->processPayment(200);    // Output: Paid $200 using PayPal

Key Takeaways:

 Payment is an abstract class that defines the blueprint. CreditCardPayment and PayPalPayment implement the method differently 

Now you understand Encapsulation and Abstraction in PHP with real-world examples! Encapsulation protects data and controls access, Abstraction simplifies complexity and enforces structure, Real-world use cases include bank accounts, vehicles, and payment systems.

Post a Comment

0 Comments