Statiskt nyckelord
Static Keyword
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.
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