← Tilbage til koncepter

Object-Oriented Programming (OOP)

Objektorienteret programmering i PHP med classes, objects, inheritance og encapsulation

Kategori: Fundamentals

🎯 Key Points

  • Classes & Objects - Blueprint og instanser af objekter
  • Properties & Methods - Data og funktionalitet i klasser
  • Inheritance (extends) - Genanvendelse af kode gennem arv
  • Visibility (public, private, protected) - Adgangskontrol til properties og methods
  • Constructors & Destructors - Initialisering og oprydning af objekter
  • Static methods & properties - Klasse-niveau funktionalitet uden instansiering
  • Abstract classes - Skabeloner for andre klasser der ikke kan instansieres
  • Interfaces - Kontrakter som klasser skal implementere
  • Encapsulation - Skjul interne detaljer og eksponér kun nødvendige dele
  • Polymorphism - Samme interface, forskellige implementationer
  • Type hinting - Specifiker forventede typer for properties og parametre
  • Constructor property promotion - Moderne PHP syntaks for mere koncis kode

💻 Kode Eksempel

<?php

// Abstract base class
abstract class Vehicle {
    protected string $brand;
    protected int $year;
    
    public function __construct(string $brand, int $year) {
        $this->brand = $brand;
        $this->year = $year;
    }
    
    abstract public function startEngine(): string;
    
    public function getInfo(): string {
        return "{$this->brand} ({$this->year})";
    }
}

// Interface for electric vehicles
interface ElectricVehicle {
    public function charge(int $percentage): void;
    public function getBatteryLevel(): int;
}

// Concrete implementation
class Tesla extends Vehicle implements ElectricVehicle {
    private int $batteryLevel = 100;
    
    public function startEngine(): string {
        return "Tesla's electric motor activated silently";
    }
    
    public function charge(int $percentage): void {
        $this->batteryLevel = min(100, $this->batteryLevel + $percentage);
    }
    
    public function getBatteryLevel(): int {
        return $this->batteryLevel;
    }
    
    public function enableAutopilot(): void {
        echo "Autopilot engaged for {$this->getInfo()}\n";
    }
}

// Usage
$myTesla = new Tesla('Tesla Model S', 2024);
echo $myTesla->startEngine() . "\n";
echo "Battery: {$myTesla->getBatteryLevel()}%\n";
$myTesla->charge(20);
echo "Battery after charge: {$myTesla->getBatteryLevel()}%\n";
$myTesla->enableAutopilot();

💼 Hvornår bruges det?

  • Web frameworks og MVC arkitektur hvor models, controllers og views er organiseret som klasser
  • Domain-driven design hvor business logik modelleres som objekter der afspejler virkelige entiteter
  • API development hvor requests, responses og resources er repræsenteret som objekter
  • Database abstraction layers hvor hver tabel eller entity er en klasse med CRUD operationer
  • Plugin og theme systemer hvor hver komponent er en selvstændig klasse med klart defineret interface
  • E-commerce systemer med produkter, ordrer, betalinger og kunder som separate objekter

⭐ Best Practices

  • Brug type hints for alle properties og method parametre for bedre type safety
  • Hold klasser små og fokuserede - Single Responsibility Principle (SRP)
  • Prefer composition over inheritance - brug interfaces og traits frem for dyb arv
  • Gør properties private eller protected og eksponér dem gennem getter/setter methods
  • Brug constructor property promotion i PHP 8+ for mere koncis kode
  • Dokumentér komplekse klasser og methods med PHPDoc kommentarer
  • Følg naming conventions - PascalCase for klasser, camelCase for methods og properties
  • Brug final keyword på klasser der ikke skal exttendes for bedre performance og sikkerhed

ℹ️ Quick Info

Kategori
Fundamentals
Sværhedsgrad
Begynder til Mellem