magiska metoder: Skillnad mellan sidversioner
Hoppa till navigering
Hoppa till sök
Admin (diskussion | bidrag) Ingen redigeringssammanfattning |
Admin (diskussion | bidrag) |
||
Rad 1: | Rad 1: | ||
== Klassabstraktion | == Klassabstraktion == | ||
PHP har abstrakta klasser och metoder. Klasser som definieras som abstrakta kan inte instansieras, och alla klasser som innehåller minst en abstrakt metod måste också vara abstrakta. Metoder som definieras som abstrakta deklarerar endast metodens signatur; de kan inte definiera implementeringen. | PHP har abstrakta klasser och metoder. Klasser som definieras som abstrakta kan inte instansieras, och alla klasser som innehåller minst en abstrakt metod måste också vara abstrakta. Metoder som definieras som abstrakta deklarerar endast metodens signatur; de kan inte definiera implementeringen. | ||
Versionen från 18 augusti 2024 kl. 19.21
Klassabstraktion
PHP har abstrakta klasser och metoder. Klasser som definieras som abstrakta kan inte instansieras, och alla klasser som innehåller minst en abstrakt metod måste också vara abstrakta. Metoder som definieras som abstrakta deklarerar endast metodens signatur; de kan inte definiera implementeringen.
När en klass ärver från en abstrakt klass måste alla metoder som är markerade som abstrakta i föräldrarklassens deklaration definieras av barnklassen och följa de vanliga reglerna för arv och signaturkompatibilitet.
Exempel #1 Abstrakt klassexempel
<?php abstract class AbstractClass { // Tvinga den ärvande klassen att definiera denna metod abstract protected function getValue(); abstract protected function prefixValue($prefix); // Gemensam metod public function printOut() { print $this->getValue() . "\n"; } } class ConcreteClass1 extends AbstractClass { protected function getValue() { return "ConcreteClass1"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; } } class ConcreteClass2 extends AbstractClass { public function getValue() { return "ConcreteClass2"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass2"; } } $class1 = new ConcreteClass1; $class1->printOut(); echo $class1->prefixValue('FOO_') ."\n"; $class2 = new ConcreteClass2; $class2->printOut(); echo $class2->prefixValue('FOO_') ."\n"; ?>
Utdata från exemplet ovan:
ConcreteClass1 FOO_ConcreteClass1 ConcreteClass2 FOO_ConcreteClass2
Exempel #2 Abstrakt klassexempel
<?php abstract class AbstractClass { // Vår abstrakta metod behöver bara definiera de nödvändiga argumenten abstract protected function prefixName($name); } class ConcreteClass extends AbstractClass { // Vår barnklass kan definiera valfria argument som inte finns i föräldrarnas signatur public function prefixName($name, $separator = ".") { if ($name == "Pacman") { $prefix = "Mr"; } elseif ($name == "Pacwoman") { $prefix = "Mrs"; } else { $prefix = ""; } return "{$prefix}{$separator} {$name}"; } } $class = new ConcreteClass; echo $class->prefixName("Pacman"), "\n"; echo $class->prefixName("Pacwoman"), "\n"; ?>
Utdata från exemplet ovan:
Mr. Pacman Mrs. Pacwoman
Sidslut
Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.oop5.magic.php
PHP
Språkreferens
Språkreferens#Klasser_och_Objekt