← Tilbage til koncepter
Object-Oriented Programming (OOP)
Objektorienteret programmering i PHP med classes, objects, inheritance og encapsulation
Kategori: Fundamentals
Foto: Patrick Martin / Unsplash
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