Overerving in PHP OOP

I

Wat is erfenis?

Wanneer een klasse voortkomt uit een andere klasse, staat dit bekend als overerving. Hier zijn enkele belangrijke termen met betrekking tot overerving in PHP.

  • Ouderklasse – De klasse waarvan de andere klassen zijn afgeleid, wordt bovenliggende klasse genoemd. Het wordt ook wel basisklasse genoemd.
  • Kind klasse – De klasse die is afgeleid van een andere klasse wordt kindklasse genoemd. Er zijn ook enkele andere namen voor, zoals bladklasse of afgeleide klasse.
Overerving in PHP

Hoe een klasse erven in PHP?

Een klasse kan worden overgenomen door gebruik te maken van strekt trefwoord. Kijk naar het volgende voorbeeld.

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}

// Apple is inherited from Fruit
class Apple extends Fruit {
  public function message() {
    echo "I am from Fruit class or Apple one? ";
  }
}
$apple= new Apple("Apple", "red");
$apple->message();
$apple->intro();
?>

In het bovenstaande voorbeeld

  • We creëren een basis- of ouderklasse Fruit met enkele eigenschappen en methoden.
  • We maken een andere klasse-appel die de bovenliggende klasse Fruit uitbreidt/erft met behulp van het sleutelwoord extends.
  • Maak een apple-instantie/-object en krijg toegang tot de fruitklasse-methode met behulp van de overerving.

Om de inleiding tot overerving in PHP af te ronden, verzamelen we de volgende punten voor u.

  1. Overerving geeft de onderliggende klasse toegang tot de openbare __construct, methoden en eigenschappen van de bovenliggende klasse.
  2. In het bovenstaande voorbeeld hebben we toegang tot de methode van de appelklasse met behulp van het object, evenals de methoden van de bovenliggende klasse.

Reikwijdte van beveiligde toegangsmodifiers in Inheritance

In de vorige tutorial hebben we geleerd dat beveiligde attributen/methoden van een klasse toegankelijk zijn binnen de klasse en de klassen die daarvan zijn afgeleid.

Laten we eerst naar het volgende voorbeeld kijken om de reikwijdte van beveiligde toegangsmodifiers bij overerving te begrijpen.

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "I am $this->name and my color is $this->color";
  }
}

class Apple extends Fruit {
  public function message() {
    echo "I am from Fruit class or Apple one?";
  }
}

$apple = new Apple("Apple", "red");
$apple->message();
$apple->intro();
?>

In het bovenstaande voorbeeld:

  • We maken een klassefruit met enkele openbare attributen en een beveiligde methode.
  • We maken een andere klasse-appel, breiden uit van Fruit-klasse en maken de instantie ervan.
  • Wanneer we proberen toegang te krijgen tot de beschermde methode van de Fruite-klasse met behulp van het klassenobject appel, geeft dit een fout omdat we proberen toegang te krijgen tot het beschermde lid van de Fruit-klasse buiten de afgeleide klasse.

Laten we naar een ander voorbeeld gaan, dat eigenlijk een beetje is aangepast aan het bovenstaande voorbeeld.

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "I am {$this->name} and my color is {$this->color}.";
  }
}

class Apple extends Fruit {
  public function message() {
    echo "Am I a fruit or an apple? ";
    $this -> intro(); // protected
  }
}

$apple = new Apple("Apple", "red");
$strawberry->message();
?>

In het bovenstaande voorbeeld is de beschermde methode van de klasse Fruit toegankelijk in de klasse appel omdat we deze binnen de klasse benaderen.

Overschrijven in overerving

Dwingend verwijst naar het opnieuw definiëren van de methoden van de bovenliggende klasse in de onderliggende klassen, met dezelfde naam. Bekijk het volgende voorbeeld van overschrijven bij overerving hieronder.

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "I am {$this->name} and my color is {$this->color}.";
  }
}

class Apple extends Fruit {
  public $weight;
  public function __construct($name, $color, $weight) {
    $this->name = $name;
    $this->color = $color;
    $this->weight = $weight;
  }
  public function intro() {
    echo "I am {$this->name}, my color is {$this->color}. Also, my weight is {$this->weight} kg.";
  }
}

$apple= new Apple("Apple", "red", 50);
$apple->intro();
?>

In het bovenstaande voorbeeld:

  • We maken een ouderklasse Fruit en een appelklasse voor kinderen die de klasse Fruit uitbreidt en de __contruct- en intro-methoden erin herdefinieert.
  • Merk op dat de appel van de onderliggende klasse de methoden __construct en intro met dezelfde naam definieert. De parameters kunnen echter verschillen.
  • We maken een appelklasse-instantie en geven de parameters door aan de constructiefunctie.
  • Wanneer we de intro-methode aanroepen met apple instance, roept het de intro-methode van de apple-klasse aan omdat we de instantie van het apple-object hebben gemaakt met behulp van de apple class-constructor.

De rol van het laatste zoekwoord bij overerving

Het finale trefwoord voorkomt dat de onderliggende/afgeleide klasse de methode van de bovenliggende/basisklasse overschrijft. Bekijk het volgende voorbeeld om het gebruik van het Final-sleutelwoord te begrijpen.

<?php
class Fruit {
  final public function intro() {
    // code
  }
}

class Apple extends Fruit {
// error to override the intro
  public function intro() {
    // code
  }
}
?>

In het bovenstaande voorbeeld probeert de apple-klasse de intro-methode te overschrijven. Het geeft een foutmelding omdat we het laatste sleutelwoord hebben gebruikt met de intro-methode van de Fruit-klasse.

Klik voor een ambtenaar verwijzing naar de PHP-overerving.

Conclusies

Overerving is niet alleen een belangrijk concept van OOP in PHP, maar speelt in elke taal een cruciale rol. Vanuit het interviewperspectief zijn erfelijkheidsvragen erg belangrijk. U moet de erfenis dus zelf oefenen.

Voeg commentaar toe

Tutor netwerk

Leer PHP van A tot Z