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 - Abstracte lessen


PHP - Wat zijn abstracte klassen en methoden?

Abstracte klassen en methoden zijn wanneer de bovenliggende klasse een benoemde methode heeft, maar de onderliggende klasse(n) nodig heeft om de taken uit te voeren.

Een abstracte klasse is een klasse die ten minste één abstracte methode bevat. Een abstracte methode is een methode die is gedeclareerd, maar niet geïmplementeerd in de code.

Een abstracte klasse of methode wordt gedefinieerd met het abstract sleutelwoord:

Syntaxis

<?php
abstract class ParentClass {
  abstract public function someMethod1();
  abstract public function someMethod2($name, $color);
  abstract public function someMethod3() : string;
}
?>

Bij het erven van een abstracte klasse, moet de methode van de onderliggende klasse worden gedefinieerd met dezelfde naam en dezelfde of een minder beperkte toegangsmodifier. Dus als de abstracte methode is gedefinieerd als beschermd, moet de methode van de onderliggende klasse worden gedefinieerd als beschermd of openbaar, maar niet als privé. Ook moeten het type en het aantal vereiste argumenten hetzelfde zijn. De onderliggende klassen kunnen echter ook optionele argumenten hebben.

Dus wanneer een onderliggende klasse wordt geërfd van een abstracte klasse, hebben we de volgende regels:

  • De methode van de onderliggende klasse moet met dezelfde naam worden gedefinieerd en de bovenliggende abstracte methode wordt opnieuw gedeclareerd
  • De methode van de onderliggende klasse moet worden gedefinieerd met dezelfde of een minder beperkte toegangsmodifier
  • Het aantal vereiste argumenten moet hetzelfde zijn. De onderliggende klasse kan echter ook optionele argumenten hebben

Laten we een voorbeeld bekijken:

Voorbeeld

<?php
// Parent class
abstract class Car {
  public $name;
  public function __construct($name) {
    $this->name = $name;
  }
  abstract public function intro() : string;
}

// Child classes
class Audi extends Car {
  public function intro() : string {
    return "Choose German quality! I'm an $this->name!";
  }
}

class Volvo extends Car {
  public function intro() : string {
    return "Proud to be Swedish! I'm a $this->name!";
  }
}

class Citroen extends Car {
  public function intro() : string {
    return "French extravagance! I'm a $this->name!";
  }
}

// Create objects from the child classes
$audi = new audi("Audi");
echo $audi->intro();
echo "<br>";

$volvo = new volvo("Volvo");
echo $volvo->intro();
echo "<br>";

$citroen = new citroen("Citroen");
echo $citroen->intro();
?>

Voorbeeld uitgelegd

De klassen Audi, Volvo en Citroën zijn overgenomen van de autoklasse. Dit betekent dat de klassen Audi, Volvo en Citroen vanwege overerving zowel de eigenschap public $name als de methode public __construct() uit de klasse Car kunnen gebruiken.

Maar intro() is een abstracte methode die in alle onderliggende klassen moet worden gedefinieerd en ze moeten een tekenreeks retourneren.



PHP - Meer abstracte klassenvoorbeelden

Laten we een ander voorbeeld bekijken waarin de abstracte methode een argument heeft:

Voorbeeld

<?php
abstract class ParentClass {
  // Abstract method with an argument
  abstract protected function prefixName($name);
}

class ChildClass extends ParentClass {
  public function prefixName($name) {
    if ($name == "John Doe") {
      $prefix = "Mr.";
    } elseif ($name == "Jane Doe") {
      $prefix = "Mrs.";
    } else {
      $prefix = "";
    }
    return "{$prefix} {$name}";
  }
}

$class = new ChildClass;
echo $class->prefixName("John Doe");
echo "<br>";
echo $class->prefixName("Jane Doe");
?>

Laten we een ander voorbeeld bekijken waarin de abstracte methode een argument heeft en de onderliggende klasse twee optionele argumenten heeft die niet zijn gedefinieerd in de abstracte methode van de bovenliggende categorie:

Voorbeeld

<?php
abstract class ParentClass {
  // Abstract method with an argument
  abstract protected function prefixName($name);
}

class ChildClass extends ParentClass {
  // The child class may define optional arguments that are not in the parent's abstract method
  public function prefixName($name, $separator = ".", $greet = "Dear") {
    if ($name == "John Doe") {
      $prefix = "Mr";
    } elseif ($name == "Jane Doe") {
      $prefix = "Mrs";
    } else {
      $prefix = "";
    }
    return "{$greet} {$prefix}{$separator} {$name}";
  }
}

$class = new ChildClass;
echo $class->prefixName("John Doe");
echo "<br>";
echo $class->prefixName("Jane Doe");
?>