La programació orientada a objectes (OOP) és un paradigma de programació que utilitza "objectes" per representar dades i mètodes. Un dels conceptes clau de l'OOP és la herència, que permet crear noves classes a partir de classes existents. Això facilita la reutilització del codi i la creació de jerarquies de classes.
Què és la Herència?
La herència és un mecanisme que permet a una classe (anomenada subclasse o classe derivada) heretar propietats i mètodes d'una altra classe (anomenada superclasse o classe base). Això permet que la subclasse reutilitzi el codi de la superclasse i afegeixi o modifiqui funcionalitats.
Beneficis de la Herència
- Reutilització del Codi: Permet reutilitzar el codi existent, reduint la duplicació.
- Organització: Facilita l'organització del codi en jerarquies lògiques.
- Extensibilitat: Permet afegir noves funcionalitats sense modificar el codi existent.
Sintaxi de la Herència en PHP
En PHP, la herència es defineix utilitzant la paraula clau extends
. Aquí tens un exemple bàsic:
<?php // Definició de la superclasse class Animal { public $name; public function __construct($name) { $this->name = $name; } public function makeSound() { echo "Some generic sound"; } } // Definició de la subclasse class Dog extends Animal { public function makeSound() { echo "Bark"; } } // Creació d'un objecte de la subclasse $dog = new Dog("Buddy"); echo $dog->name; // Output: Buddy $dog->makeSound(); // Output: Bark ?>
Explicació del Codi
-
Superclasse
Animal
:- Té una propietat
$name
. - Té un mètode
makeSound()
que imprimeix "Some generic sound". - Té un constructor que inicialitza la propietat
$name
.
- Té una propietat
-
Subclasse
Dog
:- Hereta la propietat
$name
i el mètodemakeSound()
de la classeAnimal
. - Sobreescriu el mètode
makeSound()
per imprimir "Bark".
- Hereta la propietat
-
Creació d'un Objecte:
- Es crea un objecte de la classe
Dog
amb el nom "Buddy". - Es mostra el nom de l'objecte i es crida al mètode
makeSound()
.
- Es crea un objecte de la classe
Sobreescriptura de Mètodes
La subclasse pot sobreescriure els mètodes de la superclasse per proporcionar una implementació específica. Això es fa simplement definint un mètode amb el mateix nom a la subclasse.
<?php class Cat extends Animal { public function makeSound() { echo "Meow"; } } $cat = new Cat("Whiskers"); echo $cat->name; // Output: Whiskers $cat->makeSound(); // Output: Meow ?>
Paraula Clau parent
La paraula clau parent
s'utilitza per accedir a les propietats i mètodes de la superclasse des de la subclasse. Això és útil quan vols reutilitzar el codi de la superclasse en la subclasse.
<?php class Bird extends Animal { public function makeSound() { parent::makeSound(); // Crida al mètode de la superclasse echo " Chirp"; } } $bird = new Bird("Tweety"); echo $bird->name; // Output: Tweety $bird->makeSound(); // Output: Some generic sound Chirp ?>
Exercicis Pràctics
Exercici 1: Creació de Classes i Herència
- Crea una classe
Vehicle
amb les propietatsmake
imodel
. - Afegeix un mètode
displayInfo()
que imprimeixi la marca i el model del vehicle. - Crea una subclasse
Car
que hereti deVehicle
. - Afegeix una propietat
doors
a la classeCar
. - Sobreescriu el mètode
displayInfo()
a la classeCar
per incloure el nombre de portes.
Solució
<?php class Vehicle { public $make; public $model; public function __construct($make, $model) { $this->make = $make; $this->model = $model; } public function displayInfo() { echo "Make: $this->make, Model: $this->model"; } } class Car extends Vehicle { public $doors; public function __construct($make, $model, $doors) { parent::__construct($make, $model); $this->doors = $doors; } public function displayInfo() { parent::displayInfo(); echo ", Doors: $this->doors"; } } $car = new Car("Toyota", "Corolla", 4); $car->displayInfo(); // Output: Make: Toyota, Model: Corolla, Doors: 4 ?>
Exercici 2: Utilització de parent
- Crea una classe
Person
amb les propietatsname
iage
. - Afegeix un mètode
introduce()
que imprimeixi "Hi, I'm [name] and I'm [age] years old". - Crea una subclasse
Student
que hereti dePerson
. - Afegeix una propietat
studentID
a la classeStudent
. - Sobreescriu el mètode
introduce()
a la classeStudent
per incloure l'ID de l'estudiant.
Solució
<?php class Person { public $name; public $age; public function __construct($name, $age) { $this->name = $name; $this->age = $age; } public function introduce() { echo "Hi, I'm $this->name and I'm $this->age years old"; } } class Student extends Person { public $studentID; public function __construct($name, $age, $studentID) { parent::__construct($name, $age); $this->studentID = $studentID; } public function introduce() { parent::introduce(); echo ", and my student ID is $this->studentID"; } } $student = new Student("Alice", 20, "S12345"); $student->introduce(); // Output: Hi, I'm Alice and I'm 20 years old, and my student ID is S12345 ?>
Conclusió
La herència és una característica poderosa de la programació orientada a objectes que permet crear jerarquies de classes i reutilitzar codi de manera eficient. En aquest tema, hem après com definir i utilitzar la herència en PHP, com sobreescriure mètodes i com utilitzar la paraula clau parent
per accedir a les propietats i mètodes de la superclasse. Amb aquests coneixements, estàs preparat per crear aplicacions més organitzades i mantenibles.
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ó