Klasskonstanter

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

Klasskonstanter

Det är möjligt att definiera konstanter på en per-klass-basis som förblir desamma och oföränderliga. Standard-synligheten för klasskonstanter är public.

Observera:

Klasskonstanter kan omdefinieras av en underklass. Från och med PHP 8.1.0 kan klasskonstanter inte omdefinieras av en underklass om de är definierade som final.

Det är också möjligt för gränssnitt (interfaces) att ha konstanter. Se dokumentationen för gränssnitt för exempel.

Det är möjligt att referera till klassen med en variabel. Variabelns värde kan inte vara ett nyckelord (t.ex. self, parent och static).

Observera att klasskonstanter allokeras en gång per klass, och inte för varje klassinstans.

Exempel #1 Definiera och använda en konstant

<?php
class MyClass
{
    const CONSTANT = 'konstant värde';

    function showConstant() {
        echo  self::CONSTANT . "\n";
    }
}

echo MyClass::CONSTANT . "\n";

$classname = "MyClass";
echo $classname::CONSTANT . "\n";

$class = new MyClass();
$class->showConstant();

echo $class::CONSTANT."\n";
?>

Den speciella `::class` konstanten tillåter fullständigt kvalificerad klassnamnsupplösning vid kompilering, vilket är användbart för namnrymda klasser:

Exempel #2 Namnrymd ::class exempel

<?php
namespace foo {
    class bar {
    }

    echo bar::class; // foo\bar
}
?>

Exempel #3 Klasskonstant uttrycksexempel

<?php
const ONE = 1;
class foo {
    const TWO = ONE * 2;
    const THREE = ONE + self::TWO;
    const SENTENCE = 'Värdet av THREE är '.self::THREE;
}
?>

Exempel #4 Synlighetsmodifierare för klasskonstanter, från och med PHP 7.1.0

<?php
class Foo {
    public const BAR = 'bar';
    private const BAZ = 'baz';
}
echo Foo::BAR, PHP_EOL;
echo Foo::BAZ, PHP_EOL;
?>

Utdata av ovanstående exempel i PHP 7.1:

bar

Fatal error: Uncaught Error: Cannot access private const Foo::BAZ in …

Observera:

Från och med PHP 7.1.0 är synlighetsmodifierare tillåtna för klasskonstanter.

Sidslut

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