PHP handleiding

PHP TUIS PHP Inleiding PHP installeer PHP sintaksis PHP opmerkings PHP veranderlikes PHP Echo / Druk PHP datatipes PHP Strings PHP-nommers PHP Wiskunde PHP konstante PHP-operateurs PHP As...Anders...Elseif PHP skakelaar PHP-lusse PHP funksies PHP-skikkings PHP Superglobals PHP RegEx

PHP- vorms

PHP-vormhantering PHP-vorm validering PHP-vorm word vereis PHP-vorm URL/e-pos PHP-vorm voltooi

PHP Gevorderd

PHP datum en tyd PHP sluit in PHP-lêerhantering PHP-lêer oop/lees PHP-lêer skep/skryf PHP-lêer oplaai PHP-koekies PHP-sessies PHP filters PHP-filters Gevorderd PHP-terugbelfunksies PHP JSON PHP-uitsonderings

PHP OOP

PHP Wat is OOP PHP Klasse/Objekte PHP Konstrukteur PHP vernietiger PHP Toegangswysigers PHP erfenis PHP konstante PHP Abstrakte Klasse PHP-koppelvlakke PHP eienskappe PHP statiese metodes PHP Statiese Eienskappe PHP naamruimtes PHP Iterables

MySQL- databasis

MySQL-databasis MySQL Connect MySQL Skep DB MySQL Skep tabel MySQL Voeg data in MySQL Kry Laaste ID MySQL Voeg veelvuldige in MySQL voorberei MySQL Kies Data MySQL Waar MySQL Bestel deur MySQL verwyder data MySQL-opdateringsdata MySQL-limietdata

PHP XML

PHP XML-ontleders PHP SimpleXML-ontleder PHP SimpleXML - Kry PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX Intro AJAX PHP AJAX-databasis AJAX XML AJAX Live Search AJAX-peiling

PHP voorbeelde

PHP voorbeelde PHP samesteller PHP vasvra PHP Oefeninge PHP-sertifikaat

PHP- verwysing

PHP Oorsig PHP Skikking PHP-kalender PHP datum PHP gids PHP fout PHP-uitsondering PHP lêerstelsel PHP filter PHP FTP PHP JSON PHP sleutelwoorde PHP Libxml PHP-pos PHP Wiskunde PHP Diverse PHP MySQLi PHP-netwerk PHP-uitsetbeheer PHP RegEx PHP SimpleXML PHP-stroom PHP-string PHP veranderlike hantering PHP XML-ontleder PHP zip PHP Tydsones

PHP OOP - Abstrakte Klasse


PHP - Wat is abstrakte klasse en metodes?

Abstrakte klasse en metodes is wanneer die ouerklas 'n benoemde metode het, maar sy kinderklas(se) benodig om die take in te vul.

'n Abstrakte klas is 'n klas wat ten minste een abstrakte metode bevat. 'n Abstrakte metode is 'n metode wat verklaar word, maar nie in die kode geïmplementeer word nie.

'n Abstrakte klas of metode word gedefinieer met die abstract sleutelwoord:

Sintaksis

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

Wanneer van 'n abstrakte klas geërf word, moet die kinderklasmetode met dieselfde naam gedefinieer word, en dieselfde of 'n minder beperkte toegangswysiger. Dus, as die abstrakte metode as beskerm gedefinieer word, moet die kinderklasmetode as óf beskerm óf publiek gedefinieer word, maar nie privaat nie. Die tipe en aantal vereiste argumente moet ook dieselfde wees. Die kinderklasse kan egter addisionele opsionele argumente hê.

Dus, wanneer 'n kinderklas van 'n abstrakte klas geërf word, het ons die volgende reëls:

  • Die kind klas metode moet gedefinieer word met dieselfde naam en dit herverklaar die ouer abstrakte metode
  • Die kinderklasmetode moet met dieselfde of 'n minder beperkte toegangswysiger gedefinieer word
  • Die aantal vereiste argumente moet dieselfde wees. Die kinderklas kan egter addisionele opsionele argumente hê

Kom ons kyk na 'n voorbeeld:

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 Verduidelik

Die Audi-, Volvo- en Citroen-klasse word van die Motorklas geërf. Dit beteken dat die Audi-, Volvo- en Citroen-klasse die publieke $name-eiendom sowel as die publieke __construct()-metode van die Car-klas kan gebruik as gevolg van oorerwing.

Maar intro() is 'n abstrakte metode wat in al die kinderklasse gedefinieer moet word en hulle moet 'n string terugstuur.



PHP - Meer abstrakte klasvoorbeelde

Kom ons kyk na nog 'n voorbeeld waar die abstrakte metode 'n argument het:

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");
?>

Kom ons kyk na nog 'n voorbeeld waar die abstrakte metode 'n argument het, en die kinderklas het twee opsionele argumente wat nie in die ouer se abstrakte metode gedefinieer word nie:

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");
?>