PHP -zelfstudie

PHP HOME PHP-intro PHP-installatie PHP-syntaxis PHP-opmerkingen PHP-variabelen PHP-echo / afdrukken PHP-gegevenstypen PHP-strings PHP-nummers PHP-wiskunde PHP-constanten PHP-operators PHP Als...Anders...Anders PHP-switch PHP-loops PHP-functies PHP-arrays PHP Superglobals PHP RegEx

PHP- formulieren

PHP-formulierverwerking PHP-formuliervalidatie PHP-formulier vereist URL/e-mail van PHP-formulier PHP-formulier voltooid

PHP Geavanceerd

PHP-datum en tijd PHP opnemen PHP-bestandsverwerking PHP-bestand openen/lezen PHP-bestand maken/schrijven PHP-bestand uploaden PHP-cookies PHP-sessies PHP-filters PHP-filters geavanceerd PHP-callback-functies PHP JSON PHP-uitzonderingen

PHP OOP

PHP Wat is OOP PHP-klassen/objecten PHP-constructor PHP-vernietiger PHP-toegangsmodificaties PHP-overerving PHP-constanten PHP abstracte lessen PHP-interfaces PHP-kenmerken PHP statische methoden Statische eigenschappen van PHP PHP-naamruimten PHP-iterables

MySQL- database

MySQL-database MySQL Connect MySQL DB maken MySQL-tabel maken MySQL Gegevens invoegen MySQL Laatste ID ophalen MySQL Meerdere invoegen MySQL voorbereid MySQL Gegevens selecteren MySQL Waar MySQL Bestel op MySQL Gegevens verwijderen MySQL-updategegevens MySQL-limietgegevens

PHP XML

PHP XML-parsers PHP SimpleXML-parser PHP SimpleXML - Get PHP XML Expat PHP XML DOM

PHP - AJAX

Ajax-intro AJAX PHP AJAX-database AJAX XML Live zoeken in Ajax Ajax-peiling

PHP- voorbeelden

PHP-voorbeelden PHP-compiler PHP-quiz PHP-oefeningen PHP-certificaat

PHP- referentie

PHP-overzicht PHP-array PHP-agenda PHP-datum PHP-map PHP-fout PHP-uitzondering PHP-bestandssysteem PHP-filter PHP FTP PHP JSON PHP-sleutelwoorden PHP Libxml PHP-e-mail PHP-wiskunde PHP Diversen PHP MySQLi PHP-netwerk PHP-uitvoercontrole PHP RegEx PHP SimpleXML PHP-stream PHP-string Beheer van PHP-variabelen PHP XML-parser PHP-zip PHP-tijdzones

PHP OOP - Overerving


PHP - Wat is overerving?

Overerving in OOP = Wanneer een klasse voortkomt uit een andere klasse.

De onderliggende klasse erft alle openbare en beschermde eigenschappen en methoden van de bovenliggende klasse. Bovendien kan het zijn eigen eigenschappen en methoden hebben.

Een overgeërfde klasse wordt gedefinieerd met behulp van het extends sleutelwoord.

Laten we een voorbeeld bekijken:

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}.";
  }
}

// Strawberry is inherited from Fruit
class Strawberry extends Fruit {
  public function message() {
    echo "Am I a fruit or a berry? ";
  }
}
$strawberry = new Strawberry("Strawberry", "red");
$strawberry->message();
$strawberry->intro();
?>

Voorbeeld uitgelegd

De klasse Aardbei is geërfd van de klasse Fruit.

Dit betekent dat de klasse Strawberry vanwege overerving de openbare eigenschappen $name en $color kan gebruiken, evenals de methoden public __construct() en intro() van de klasse Fruit.

De klasse Strawberry heeft ook zijn eigen methode: message().



PHP - Overerving en de Protected Access Modifier

In het vorige hoofdstuk hebben we geleerd dat protectedeigenschappen of methoden toegankelijk zijn binnen de klasse en door klassen die van die klasse zijn afgeleid. Wat betekent dat?

Laten we een voorbeeld bekijken:

Voorbeeld

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

class Strawberry extends Fruit {
  public function message() {
    echo "Am I a fruit or a berry? ";
  }
}

// Try to call all three methods from outside class
$strawberry = new Strawberry("Strawberry", "red");  // OK. __construct() is public
$strawberry->message(); // OK. message() is public
$strawberry->intro(); // ERROR. intro() is protected
?>

In het bovenstaande voorbeeld zien we dat als we een protected methode (intro()) van buiten de klasse proberen aan te roepen, we een foutmelding krijgen. public methoden werken prima!

Laten we een ander voorbeeld bekijken:

Voorbeeld

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

class Strawberry extends Fruit {
  public function message() {
    echo "Am I a fruit or a berry? ";
    // Call protected method from within derived class - OK
    $this -> intro();
  }
}

$strawberry = new Strawberry("Strawberry", "red"); // OK. __construct() is public
$strawberry->message(); // OK. message() is public and it calls intro() (which is protected) from within the derived class
?>

In bovenstaand voorbeeld zien we dat alles goed werkt! Het is omdat we de protected methode (intro()) aanroepen vanuit de afgeleide klasse.


PHP - Overerfde methoden overschrijven

Overerfde methoden kunnen worden overschreven door de methoden opnieuw te definiëren (gebruik dezelfde naam) in de onderliggende klasse.

Kijk naar het voorbeeld hieronder. De methoden __construct() en intro() in de onderliggende klasse (Strawberry) overschrijven de methoden __construct() en intro() in de bovenliggende klasse (Fruit):

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}.";
  }
}

class Strawberry extends Fruit {
  public $weight;
  public function __construct($name, $color, $weight) {
    $this->name = $name;
    $this->color = $color;
    $this->weight = $weight;
  }
  public function intro() {
    echo "The fruit is {$this->name}, the color is {$this->color}, and the weight is {$this->weight} gram.";
  }
}

$strawberry = new Strawberry("Strawberry", "red", 50);
$strawberry->intro();
?>

PHP - Het laatste trefwoord

Het final sleutelwoord kan worden gebruikt om klasseovererving te voorkomen of om methodeoverschrijving te voorkomen.

Het volgende voorbeeld laat zien hoe u klasse-overerving kunt voorkomen:

Voorbeeld

<?php
final class Fruit {
  // some code
}

// will result in error
class Strawberry extends Fruit {
  // some code
}
?>

Het volgende voorbeeld laat zien hoe u het overschrijven van methoden kunt voorkomen:

Voorbeeld

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

class Strawberry extends Fruit {
  // will result in error
  public function intro() {
    // some code
  }
}
?>