Static Keyword

Оновлено: 09.05.2023

На цій сторінці описано використання ключового слова static для визначення статичних методів і властивостей. static також можна використовувати для визначення статичних змінних, визначення статичних анонімних функцій і для пізнього статичного зв'язування. Будь ласка, зверніться до цих сторінок для отримання інформації про ці значення static.

Оголошення властивостей або методів класу як статичних робить їх доступними без необхідності створювати екземпляри класу. До них також можна отримати доступ статично в об'єкті екземпляра класу.

Оскільки статичні методи можна викликати без екземпляра створеного об'єкта, псевдозмінна $this недоступна всередині методів, оголошених як статичні.

Виклик нестатичних методів статично генерує помилку.

До версії PHP 8.0.0 виклик нестатичних методів статично був застарілим і генерував попередження E_DEPRECATED.

Приклад #1 Приклад статичного методу

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

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

Доступ до статичних властивостей здійснюється за допомогою оператора визначення області видимості (::) і не може бути здійснений через оператор об'єкта (->).

На клас можна посилатися за допомогою змінної. Значення змінної не може бути ключовим словом (наприклад, self, parent та static).

Приклад #2 Приклад статичної властивості

<?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";      // Undefined "Property" 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";
?>

Вивід вищенаведеного прикладу в PHP 8 буде аналогічним: