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

  1. Reutilització del Codi: Permet reutilitzar el codi existent, reduint la duplicació.
  2. Organització: Facilita l'organització del codi en jerarquies lògiques.
  3. 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

  1. Superclasse Animal:

    • Té una propietat $name.
    • Té un mètode makeSound() que imprimeix "Some generic sound".
    • Té un constructor que inicialitza la propietat $name.
  2. Subclasse Dog:

    • Hereta la propietat $name i el mètode makeSound() de la classe Animal.
    • Sobreescriu el mètode makeSound() per imprimir "Bark".
  3. 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().

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

  1. Crea una classe Vehicle amb les propietats make i model.
  2. Afegeix un mètode displayInfo() que imprimeixi la marca i el model del vehicle.
  3. Crea una subclasse Car que hereti de Vehicle.
  4. Afegeix una propietat doors a la classe Car.
  5. Sobreescriu el mètode displayInfo() a la classe Car 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

  1. Crea una classe Person amb les propietats name i age.
  2. Afegeix un mètode introduce() que imprimeixi "Hi, I'm [name] and I'm [age] years old".
  3. Crea una subclasse Student que hereti de Person.
  4. Afegeix una propietat studentID a la classe Student.
  5. Sobreescriu el mètode introduce() a la classe Student 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

Mòdul 2: Estructures de Control

Mòdul 3: Funcions

Mòdul 4: Arrays

Mòdul 5: Treballant amb Formularis

Mòdul 6: Treballant amb Fitxers

Mòdul 7: Programació Orientada a Objectes (OOP)

Mòdul 8: Treballant amb Bases de Dades

Mòdul 9: Tècniques Avançades de PHP

Mòdul 10: Frameworks PHP i Millors Pràctiques

Mòdul 11: Projecte: Construint una Aplicació Web

© Copyright 2024. Tots els drets reservats