suchen
HeimBackend-EntwicklungPHP-TutorialDetaillierte Erläuterung der Funktionsbeispiele für abstrakte PHP-Klassen

Eigenschaften der abstrakten Klasse

1. Als abstrakt definierte Klassen können nicht instanziiert werden.
2. Wenn mindestens eine Methode darin als abstrakt deklariert ist, muss diese Klasse als abstrakt deklariert werden.
3. Eine als abstrakt definierte Methode deklariert nur ihre aufrufende Methode (Parameter) und kann nicht ihre spezifische Funktionsimplementierung definieren.
4. Beim Erben einer abstrakten Klasse muss die Unterklasse alle abstrakten Methoden in der übergeordneten Klasse definieren (die Zugriffskontrolle dieser Methoden muss mit der in der übergeordneten Klasse identisch sein (oder entspannter) .)

demo

abstract class AbstractClass{
 // 强制要求子类定义这些方法
    abstract protected function getValue();
    abstract protected function prefixValue($prefix);

    // 普通方法(非抽象方法)
    public function printOut() {
        print $this->getValue() . "\n";
    }
class ConcreteClass1 extends AbstractClass{   //父类定义了俩个抽象方法,如子类只实现了其中一个,则报如下错误//Fatal error: Class ConcreteClass1 contains 1 abstract //method and must therefore be declared abstract or //implement the remaining methods //(AbstractClass::prefixValue)
    protected function getValue() {
        return "ConcreteClass1";
    } 
   // 且子类的访问权限不能低于父类,如果将如下子类的访问方式改为private则会报如下错误
    //Fatal error: Access level to //ConcreteClass1::prefixValue() must be protected (as in //class AbstractClass) or weaker
    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass1";
    }

}

//当实例化一个抽象类时,Fatal error: Cannot instantiate //abstract class AbstractClass
//$obj = new AbstractClass();
// 但是我们可以这么使用##########################################################
abstract class Foo{
     static function bar()
     {
         echo "test\n";
     }
 }

Foo::bar();##########################################################
$obj = new ConcreteClass1();
echo $obj->getValue();

5. Die Unterklasse kann einen optionalen Parameter definieren (d. h. sie muss einen Standardwert haben), der nicht in enthalten ist Wenn Sie die abstrakte Methode der übergeordneten Klasse deklarieren, besteht kein Konflikt zwischen den beiden Anweisungen.

abstract class AbstractClass{
    // 我们的抽象方法仅需要定义需要的参数
    abstract protected function prefixName($name);
}

class ConcreteClass extends AbstractClass
{

    // 我们的子类可以定义父类签名中不存在的可选参数
    // 如果这里的$separator没有默认值,则会报Fatal error: 、、//Declaration of ConcreteClass::prefixName() must be //compatible with that of AbstractClass::prefixName()
    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";

6. Abstrakte Klassen benötigen keine abstrakten Methoden. Umgekehrt müssen Klassen mit abstrakten Methoden als abstrakte Klassen deklariert werden.

abstract class A{
     public function show(){
         echo 'A';
     }
 } class B extends A{
     public function hello(){
         echo 'B';         
         parent::show();
     }
 } 
 $obj = new B; 
 $obj->hello(); // BA

7

// 正确的定义顺序
abstract class horse extends animal {
     public function get_breed() { return "Jersey"; }
 } 
 class cart extends horse {
     public function get_breed() { return "Wood"; }
 }
 // 错误的定义顺序,将会导致horse类找不到
 class cart extends horse {
     public function get_breed() { return "Wood"; }
 } 
 abstract class horse extends animal {
     public function get_breed() { return "Jersey"; }
 }

8. Abstrakte Methoden können statischeMethoden sein

abstract class FOO
{
     abstract static function dump();
 } 
 class BAR extends FOO{
     static function dump(){var_dump("BAR");}
 }
BAR::dump(); // string(3) "BAR"

9. Wenn eine abstrakte Klasse eine andere abstrakte Klasse erbt, muss dies nicht der Fall sein als abstrakt deklariert werden

//Fatal error: Can't inherit abstract function //class1::someFunc() (previously declared abstract in //class2)abstract class class1 { 
   abstract public function someFunc(); 
 } 
 abstract class class2 extends class1 { 
   abstract public function someFunc(); 
 } 

//下面的是正确的
abstract class class1 { 
   abstract public function someFunc(); 
 } 
 abstract class class2 extends class1 { 
 }

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Funktionsbeispiele für abstrakte PHP-Klassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Was ist der Unterschied zwischen absoluten und müßigen Sitzungszeitüberschreitungen?Was ist der Unterschied zwischen absoluten und müßigen Sitzungszeitüberschreitungen?May 03, 2025 am 12:21 AM

Die Absolute -Sitzungs -Zeitlimit startet zum Zeitpunkt der Erstellung der Sitzung, während eine Zeitlimit in der Leerlaufsitzung zum Zeitpunkt der No -Operation des Benutzers beginnt. Das Absolute -Sitzungs -Zeitlimit ist für Szenarien geeignet, in denen eine strenge Kontrolle des Sitzungslebenszyklus erforderlich ist, z. B. finanzielle Anwendungen. Das Timeout der Leerlaufsitzung eignet sich für Anwendungen, die die Benutzer für lange Zeit aktiv halten, z. B. soziale Medien.

Welche Schritte würden Sie unternehmen, wenn Sitzungen nicht auf Ihrem Server funktionieren?Welche Schritte würden Sie unternehmen, wenn Sitzungen nicht auf Ihrem Server funktionieren?May 03, 2025 am 12:19 AM

Der Serversitzungsausfall kann durch Befolgen der Schritte gelöst werden: 1. Überprüfen Sie die Serverkonfiguration, um sicherzustellen, dass die Sitzung korrekt festgelegt wird. 2. Überprüfen Sie die Client -Cookies, bestätigen Sie, dass der Browser es unterstützt und korrekt senden. 3. Überprüfen Sie die Speicherdienste wie Redis, um sicherzustellen, dass sie normal arbeiten. 4. Überprüfen Sie den Anwendungscode, um die korrekte Sitzungslogik sicherzustellen. Durch diese Schritte können Konversationsprobleme effektiv diagnostiziert und repariert werden und die Benutzererfahrung verbessert werden.

Welche Bedeutung hat die Funktion Session_start ()?Welche Bedeutung hat die Funktion Session_start ()?May 03, 2025 am 12:18 AM

Session_Start () iscrucialinphPFormAnagingUSSERSIONS.1) ItinitiatesanewSessionifnoneExists, 2) Wiederaufnahmen und 3) setaSessionCookieforContinuityAcrossRequests, aktivierende Anwendungen wie

Was ist für die Festlegung der HTTPonly -Flag für Sitzungs Cookies wichtig?Was ist für die Festlegung der HTTPonly -Flag für Sitzungs Cookies wichtig?May 03, 2025 am 12:10 AM

Das Festlegen des HTTPonly -Flags ist für Sitzungscookies von entscheidender Bedeutung, da es effektiv verhindern und die Informationen zur Benutzersitzung schützen kann. Insbesondere 1) Das Httponly -Flag verhindert, dass JavaScript auf Cookies zugreift, 2) Das Flag kann durch SetCookies eingestellt werden und in PHP und Flasche 3), obwohl es nicht von allen Angriffen von allen Angriffen verhindert werden kann, Teil der Gesamtsicherheitsrichtlinie sein sollte.

Welches Problem lösen PHP -Sitzungen in der Webentwicklung?Welches Problem lösen PHP -Sitzungen in der Webentwicklung?May 03, 2025 am 12:02 AM

PhpSsionSsionSolvetheProblemofMaintainingStateAcrossmultipehttprequestsBoringDataontheserverandassociatingitittprequests.1) Sie starteten die Stundeataserver-Seite, typischerweise infileSordatabasen, undusaSasionIdinacookookookotenData

Welche Daten können in einer PHP -Sitzung gespeichert werden?Welche Daten können in einer PHP -Sitzung gespeichert werden?May 02, 2025 am 12:17 AM

PHPSSIONS CANSTORESTRINGEN, ZUGNALTEN, ARRAYS, ANDOBjekte.1.

Wie starten Sie eine PHP -Sitzung?Wie starten Sie eine PHP -Sitzung?May 02, 2025 am 12:16 AM

TostartaphpSession, useSession_start () atthescript'Sbeginning.1) PlaCEITBEFOREANYOUTPUTTOTHESESSIONSCOOKIE.2) useSsionsforuserDatalikeloginStatusOrShopingCarts

Was ist eine Sitzungsregeneration und wie verbessert es die Sicherheit?Was ist eine Sitzungsregeneration und wie verbessert es die Sicherheit?May 02, 2025 am 12:15 AM

Die Sitzung der Sitzung bezieht sich auf die Generierung einer neuen Sitzungs -ID und die Ungültigmachung der alten ID, wenn der Benutzer sensible Vorgänge bei festgelegten Sitzungsangriffen ausführt. Die Implementierungsschritte umfassen: 1. Erkennen sensibler Vorgänge, 2. Erstellen neuer Sitzungs-ID, 3..

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.