En aquest tema, explorarem dos conceptes fonamentals de la Programació Orientada a Objectes (OOP) en PHP: les interfícies i les classes abstractes. Aquests conceptes ens permeten definir estructures més flexibles i reutilitzables en el nostre codi.
Què és una Interfície?
Una interfície en PHP és una col·lecció de mètodes sense implementar que una classe pot implementar. Les interfícies defineixen un contracte que les classes han de seguir. Això permet que diferents classes implementin la mateixa interfície de maneres diferents.
Característiques de les Interfícies:
- No poden tenir propietats.
- Tots els mètodes han de ser públics.
- No poden tenir implementacions de mètodes, només declaracions.
- Una classe pot implementar múltiples interfícies.
Exemple d'Interfície:
<?php interface Logger { public function log(string $message); } class FileLogger implements Logger { public function log(string $message) { // Implementació per escriure el missatge en un fitxer echo "Log to file: " . $message; } } class DatabaseLogger implements Logger { public function log(string $message) { // Implementació per escriure el missatge en una base de dades echo "Log to database: " . $message; } } $fileLogger = new FileLogger(); $fileLogger->log("Això és un missatge de log."); $databaseLogger = new DatabaseLogger(); $databaseLogger->log("Això és un altre missatge de log."); ?>
Explicació:
- Hem definit una interfície
Logger
amb un mètodelog
. - Les classes
FileLogger
iDatabaseLogger
implementen la interfícieLogger
i proporcionen les seves pròpies versions del mètodelog
.
Què és una Classe Abstracta?
Una classe abstracta és una classe que no es pot instanciar directament i pot contenir mètodes abstractes (sense implementació) i mètodes concrets (amb implementació). Les classes abstractes es fan servir per crear una base per a altres classes.
Característiques de les Classes Abstractes:
- Pot tenir propietats i mètodes.
- Pot tenir mètodes abstractes i mètodes concrets.
- Les classes que hereten d'una classe abstracta han d'implementar tots els mètodes abstractes.
Exemple de Classe Abstracta:
<?php abstract class Animal { protected $name; public function __construct($name) { $this->name = $name; } abstract public function makeSound(); public function getName() { return $this->name; } } class Dog extends Animal { public function makeSound() { return "Woof!"; } } class Cat extends Animal { public function makeSound() { return "Meow!"; } } $dog = new Dog("Rex"); echo $dog->getName() . " says " . $dog->makeSound(); $cat = new Cat("Whiskers"); echo $cat->getName() . " says " . $cat->makeSound(); ?>
Explicació:
- Hem definit una classe abstracta
Animal
amb un mètode abstractemakeSound
i un mètode concretgetName
. - Les classes
Dog
iCat
hereten deAnimal
i implementen el mètodemakeSound
.
Comparació entre Interfícies i Classes Abstractes
Característica | Interfície | Classe Abstracta |
---|---|---|
Propietats | No | Sí |
Mètodes amb implementació | No | Sí |
Múltiples herències | Sí | No |
Instanciació | No | No |
Exercicis Pràctics
Exercici 1: Implementar una Interfície
Defineix una interfície Shape
amb un mètode calculateArea
. Implementa aquesta interfície en dues classes: Circle
i Rectangle
.
<?php interface Shape { public function calculateArea(); } class Circle implements Shape { private $radius; public function __construct($radius) { $this->radius = $radius; } public function calculateArea() { return pi() * pow($this->radius, 2); } } class Rectangle implements Shape { private $width; private $height; public function __construct($width, $height) { $this->width = $width; $this->height = $height; } public function calculateArea() { return $this->width * $this->height; } } $circle = new Circle(5); echo "Area of Circle: " . $circle->calculateArea(); $rectangle = new Rectangle(4, 6); echo "Area of Rectangle: " . $rectangle->calculateArea(); ?>
Exercici 2: Crear una Classe Abstracta
Defineix una classe abstracta Vehicle
amb un mètode abstracte startEngine
i un mètode concret getFuelType
. Implementa aquesta classe en dues subclasses: Car
i Motorcycle
.
<?php abstract class Vehicle { protected $fuelType; public function __construct($fuelType) { $this->fuelType = $fuelType; } abstract public function startEngine(); public function getFuelType() { return $this->fuelType; } } class Car extends Vehicle { public function startEngine() { return "Car engine started with " . $this->getFuelType(); } } class Motorcycle extends Vehicle { public function startEngine() { return "Motorcycle engine started with " . $this->getFuelType(); } } $car = new Car("Gasoline"); echo $car->startEngine(); $motorcycle = new Motorcycle("Diesel"); echo $motorcycle->startEngine(); ?>
Resum
En aquesta secció, hem après sobre les interfícies i les classes abstractes en PHP. Les interfícies ens permeten definir un contracte que les classes han de seguir, mentre que les classes abstractes ens permeten crear una base per a altres classes amb mètodes abstractes i concrets. Aquests conceptes són fonamentals per a la creació de codi flexible i reutilitzable en la programació orientada a objectes.
Curs de Programació PHP
Mòdul 1: Introducció a PHP
- Què és PHP?
- Configuració de l'Entorn de Desenvolupament
- El teu Primer Script PHP
- Sintaxi i Variables de PHP
- Tipus de Dades en PHP
Mòdul 2: Estructures de Control
Mòdul 3: Funcions
- Definició i Crida de Funcions
- Paràmetres de Funció i Valors de Retorn
- Àmbit de Variables
- Funcions Anònimes i Closures
Mòdul 4: Arrays
Mòdul 5: Treballant amb Formularis
Mòdul 6: Treballant amb Fitxers
- Lectura i Escriptura de Fitxers
- Funcions de Gestió de Fitxers
- Permisos de Fitxers
- Funcions de Directori
Mòdul 7: Programació Orientada a Objectes (OOP)
- Introducció a OOP
- Classes i Objectes
- Propietats i Mètodes
- Herència
- Interfícies i Classes Abstractes
- Traits
Mòdul 8: Treballant amb Bases de Dades
- Introducció a les Bases de Dades
- Connexió a una Base de Dades MySQL
- Realització d'Operacions CRUD
- Ús de PDO per a la Interacció amb Bases de Dades
- Seguretat en Bases de Dades
Mòdul 9: Tècniques Avançades de PHP
- Gestió d'Errors i Excepcions
- Sessions i Cookies
- Expressions Regulars
- Treballant amb JSON i XML
- PHP i Serveis Web
Mòdul 10: Frameworks PHP i Millors Pràctiques
- Introducció als Frameworks PHP
- Començant amb Laravel
- Arquitectura MVC
- Millors Pràctiques en Desenvolupament PHP
- Proves i Depuració