Statiskt nyckelord

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

Static Keyword

Mall:Tip

Att deklarera klassegenskaper eller metoder som statiska gör dem tillgängliga utan att en instans av klassen behöver skapas. Dessa kan också nås statiskt inom ett instanserat klassobjekt.

Statiska metoder

Eftersom statiska metoder kan anropas utan att en instans av objektet skapas, är pseudo-variabeln $this inte tillgänglig inuti metoder som deklareras som statiska.

Mall:Warning

Före PHP 8.0.0, var det föråldrat att anropa icke-statiska metoder statiskt, och genererade en E_DEPRECATED-varning.

Exempel #1 Statiskt metodexempel

<?php
class Foo {
    public static function aStaticMethod() {
        // ...
    }
}

Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod();
?>

Statiska egenskaper

Statiska egenskaper nås med hjälp av Scope Resolution Operator (::) och kan inte nås genom objektoperatören (->).

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).

Exempel #2 Statiskt egenskapsexempel

<?php
class Foo
{
    public static $my_static = 'foo';

    public function staticValue() {
        return self::$my_static;
    }
}

class Bar extends Foo
{
    public function fooStatic() {
        return parent::$my_static;
    }
}


print Foo::$my_static . "\n";

$foo = new Foo();
print $foo->staticValue() . "\n";
print $foo->my_static . "\n";      // Odefinierad "egenskap" my_static 

print $foo::$my_static . "\n";
$classname = 'Foo';
print $classname::$my_static . "\n";

print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>

Utdata från exemplet ovan i PHP 8 är liknande:

foo
foo

Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23

Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23

foo
foo
foo
foo

Sidslut

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