Ключевое слово static

Подсказка

Эта страница описывает использование ключевого слова static для определения статических методов и свойств. static также может использоваться для определения статических переменных и позднего статического связывания. Для получения информации о таком применении ключевого слова static обратитесь по вышеуказанным страницам.

Объявление свойств и методов класса статическими позволяет обращаться к ним без создания экземпляра класса. Свойство класса, объявленное как статическое, не может быть доступно посредством экземпляра класса (но статический метод может быть вызван).

В целях совместимости с PHP 4, если определение области видимости не используется, то свойство или метод будут обрабатываться так, как если бы он был объявлен как public.

Статические методы

Так как статические методы вызываются без создания экземпляра класса, то псевдопеременная $this недоступна внутри метода, объявленного как статический.

Предостережение

В PHP 5 вызов нестатических методов статически вызовет ошибку уровня E_STRICT.

Внимание

В PHP 7 вызов нестатических методов статически объявлен устаревшим и вызовет ошибку уровня E_DEPRECATED. Поддержка вызова нестатических методов статически может быть удалена в будущем.

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

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

Foo::aStaticMethod();
$classname 'Foo';
$classname::aStaticMethod(); // Начиная с PHP 5.3.0
?>

Статические свойства

Статические свойства не могут быть доступны через объект с помощью оператора "->".

Как и любая другая статическая переменная PHP, статические свойства могут инициализироваться только используя литерал или константу до PHP 5.6; выражения не допускается. В PHP 5.6 и более новых версиях применяются те же правила, что и для выражений const: возможны некоторые выражения, если они могут вычислены во время компиляциии.

Начиная с PHP 5.3.0, существует возможность ссылаться на класс используя переменную. Значение переменной в таком случае не может быть ключевым словом (например, 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";      // Не определено свойство my_static

print $foo::$my_static "\n"// Начиная с PHP 5.3.0
$classname 'Foo';
print 
$classname::$my_static "\n"// Начиная с PHP 5.3.0

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