Slutligt nyckelord

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

Final-nyckelordet

Nyckelordet `final` förhindrar barnklasser från att åsidosätta en metod eller konstant genom att sätta final framför definitionen. Om klassen själv definieras som final kan den inte utökas.

Exempel #1: Finala metoder

<?php
class BaseClass {
   public function test() {
       echo "BaseClass::test() anropad\n";
   }
   
   final public function moreTesting() {
       echo "BaseClass::moreTesting() anropad\n";
   }
}

class ChildClass extends BaseClass {
   public function moreTesting() {
       echo "ChildClass::moreTesting() anropad\n";
   }
}
// Resulterar i ett fatalt fel: Kan inte åsidosätta final-metoden BaseClass::moreTesting()
?>

Exempel #2: Finala klasser

<?php
final class BaseClass {
   public function test() {
       echo "BaseClass::test() anropad\n";
   }

   // Eftersom klassen redan är final är final-nyckelordet överflödigt
   final public function moreTesting() {
       echo "BaseClass::moreTesting() anropad\n";
   }
}

class ChildClass extends BaseClass {
}
// Resulterar i ett fatalt fel: Klassen ChildClass kan inte ärva från final-klassen (BaseClass)
?>

Exempel #3: Finala konstanter från och med PHP 8.1.0

<?php
class Foo
{
    final public const X = "foo";
}

class Bar extends Foo
{
    public const X = "bar";
}

// Fatalt fel: Bar::X kan inte åsidosätta final-konstanten Foo::X
?>

Notera: Egenskaper kan inte deklareras som finala: endast klasser, metoder och konstanter (från och med PHP 8.1.0) kan deklareras som finala. Från och med PHP 8.0.0 kan privata metoder inte deklareras som finala, förutom konstruktorn.


Sidslut

Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.oop5.final.php
PHP
Språkreferens
Språkreferens#Klasser_och_Objekt


Det här är en maskinöversättning av PHP-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/