← 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