Herencia de clases - PHP

Herencia de clases

Esto lo entendemos mejor si nos vamos a un diccionario y buscamos la palabra heredar, hay muchas definiciones pero la que aplica es la siguiente:


Heredar: Recibir algo de una persona o circunstancia anterior.

Es eso simplemente (tu como hijo recibes, usas y hasta modificas lo que tu padre te deja), y el ejemplo que aquí haremos será con 4 archivos:

  • Index: El archivo a ejecutar cuando accedemos al navegador.
  • Person: Clase principal, también llamada clase madre.
  • Student: También es una persona, pero tiene la entidad o el rol de "Estudiante" (hija de Person).
  • Professor: Es otra persona al igual que Studen, pero tiene otro rol, es un "Profesor o líder de aula" (hija de Person).

Sintaxis extends

A través de un ejemplo veremos cómo desde un archivo podemos heredar y al mismo tiempo aprovechar lo que hemos heredado.

Archivo Person (clase madre)

<?php

/**
* this class represents a person
*/
class Person 
{
    
    var $name;
    var $lastname;

    function __construct($name, $lastname)
    {
        $this->name = $name;
        $this->lastname = $lastname;
    }

    function greet()
    {
        return "Hola, {$this->name} cómo estas?";
    }
}

Archivo Student (clase hija, heredera de Person)

<?php

/**
* this class represents a person (Student)
*/
class Student extends Person
{
    
}

Nota que no hay nada dentro de ella, pero al escribir extends Person decimos que hereda de Person y por ende cuenta con el método __construct(), propiedades y método greet().

Archivo Professor (clase hija, heredera de Person)

<?php

/**
* this class represents a person (Professor)
*/
class Professor extends Person
{
    
    function greet()
    {
        return "Hola profesor {$this->name}, cómo está usted?";
    }
}

Al igual que Student, la clase Professor cuenta con todo lo que tiene su madre Person, pero en Professor hice un cambio... He sobrescrito el método greet(). Para saludar con mayor respeto a los profesores que usen el sistema.

Ahora vamos con el archivo que ejecuta todo esto y le da sentido a nuestro sistema, uso la palabra sentido porque llama y ejecuta en orden todo lo antes escrito.

Archivo Index (archivo principal)

<?php

require 'Person.php';
require 'Student.php';
require 'Professor.php';

$student = new Student('Luisa', 'Fantone');
echo $student->greet();

echo '<br>';

$professor = new Professor('Italo', 'Morales');
echo $professor->greet();

Y tenemos el siguiente flujo

Ciclo o flujo de trabajo

  • Se ejecuta el archivo index.php
  • Se incluye la clase Person, Student y Professor (en ese orden porque debe ir primero la clase madre)
  • Se crea el objeto $student y se saluda al estudiante
    • Aquí se usa la clase Student y aprovecha todo de la clase Person gracias a la herencia
  • Se crea el objeto $professor y se saluda
    • Aquí hacemos uso de la clase Professor y la misma aprovecha todo lo que hay en la clase Person, sin embargo, observa que he sobrescrito el método greet(), y esto es lo valioso.. Que a pesar de que heredamos y usamos, no estamos obligados a seguir un patrón estricto.

Con esto finalizamos, visita con frecuencia está web para que aprendas aun más cosas de PHP.

El código está en Github de Rimorsoft Regálanos estrellas y haz fork.

Adquiere en preventa y aprovecha un gran descuento TDD en Laravel

Comparte en

Creado por: Venezuela Italo Morales

Profesor de #Laravel y #PHP en Rimorsoft Online

Más información


Spatie/Laravel Permission ¿Cómo agregar campos en la tabla "roles"?

Hola, mi consulta es la siguiente:

Relacioné la tabla "roles" con mi tabla** "empresa**", es decir, en la tabla "roles", tengo el campo "id_empresa", en la vista, están los campos necesarios y el select de la empresa pero al querer guardar los datos, me arroja el siguiente error: ** "The given role or permission should use guard web instead of Empresas. "** No ...

SOFTWARE PARA CONSULTORIOS MEDICOS

Hola Amigos. soy nuevo en el grupo.. me gustaria saber si alguien tiene o tuvo algun proyecto basado en laravel, para consultorios medicos? ...

sincronización de componentes hermanos

un gran saludo a la comunidad rimorsorf... espero de su valiosa ayuda para mi problema que es el siguiente:

tengo dos componentes en el mismo nivel, el primero crea una tabla con una lista de procesos por tramitar y el segundo componente lista en una tabla los procesos que se han asignado para tramitar; cuando en la primera tabla se asigna el proceso este debe desaparecer de...

plantilla blade y vuejs2

buenas noches comunidad, por casualidad alguien sabrá si se puede integrar la plantilla de laravel blade en vuejs2 component??, gracias dee antemano...